<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title><![CDATA[Panagiotis Bailis - Elasticsearch Labs]]></title>
    <description><![CDATA[Articles and tutorials from the Search team at Elastic]]></description>
    <copyright><![CDATA[© 2026. Elasticsearch B.V. All Rights Reserved]]></copyright>
    <image>
      <title><![CDATA[Panagiotis Bailis - Elasticsearch Labs]]></title>
      <url>https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1121c0bf0e8a6e65/6a88da6340a1841030ef456f/search-labs-thumbnail.png</url>
      <link>https://www.elastic.co/cn/search-labs/author/panagiotis-bailis</link>
    </image>
    <link>https://www.elastic.co/cn/search-labs/author/panagiotis-bailis</link>
    <atom:link href="https://www.elastic.co/cn/search-labs/rss/author/panagiotis-bailis.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[cn]]></language>
    <lastBuildDate>Wed, 23 Sep 2026 09:48:29 GMT</lastBuildDate>
  <item>
    <title><![CDATA[混合搜索重温：在 Elasticsearch 中引入线性检索器！]]></title>
    <description><![CDATA[了解线性检索器如何利用加权分数和 MinMax 归一化来增强混合搜索，从而获得更精确、更一致的排名，并学习如何使用它。]]></description>
    <content:encoded><![CDATA[<p>在<a href="https://www.elastic.co/cn/search-labs/blog/elasticsearch-retrievers-ga-8.16.0">上一篇博文</a>中，我们介绍了重新设计的 "从零开始 "检索器框架，它可以创建复杂的排名管道。我们还探讨了互易排名融合（RRF）检索器如何通过合并不同查询的结果来实现混合搜索。虽然 RRF 很容易实现，但它有一个明显的局限性：它只关注相对排名，而忽略了实际得分。这就给微调和优化带来了挑战。</p><h2>直线型寻回犬</h2><p>在本篇文章中，我们将介绍<a href="https://www.elastic.co/cn/docs/solutions/search/retrievers-overview#retrievers-overview-types"><code>linear</code></a> <a href="https://www.elastic.co/cn/docs/solutions/search/retrievers-overview#retrievers-overview-types">retriever</a>，它是我们支持混合搜索的最新成员！与<code>rrf</code> 不同，<code>linear</code> retriever 计算的是与文档匹配的所有查询的加权总和。这种方法既能保留结果集中每个文档的相对重要性，又能精确控制每个查询对最终得分的影响。因此，它为微调混合搜索提供了一种更直观、更灵活的方式。</p><p>定义一个线性检索器，其最终得分的计算公式为</p><p>就这么简单：</p>GET linear_retriever_blog/_search
{
   "retriever": {
       "linear": {
           "retrievers": [
               {
                   "retriever": {
                       "knn": {
                          ...
                        }
                    },
                   "weight": 5
               },
                  {
                   "retriever": {
                       "standard": {
                          ...
                        }
                    },
                   "weight": 1.5
               },


           ]
        }
     }
}<p>注意到它有多简单直观了吗？(与<code>rrf</code> 非常相似！）这种配置允许您精确控制每种查询类型对最终排名的贡献程度，这与<code>rrf</code> 不同，后者仅依赖于相对排名。</p><p>需要注意的是：<code>knn</code> 分数可能有严格的界限，这取决于所使用的相似性指标。例如，使用余弦相似度或单位归一化向量的点积，得分总是在<code>[0, 1]</code> 范围内。相比之下，<code>bm25</code> 分数的可预测性较差，而且没有明确的界限。</p><h2>评分缩放：KNN vs BM25</h2><p>混合搜索面临的一个挑战是，不同的检索器会产生不同的分数。例如，请考虑以下情况：</p><p>查询 A 得分：</p><p></p><p>doc1</p><p>doc2</p><p>doc3</p><p>文档4</p><p>knn</p><p>0.347</p><p>0.35</p><p>0.348</p><p>0.346</p><p>bm25</p><p>100</p><p>1.5</p><p>1</p><p>0.5</p><p>查询 B 得分：</p><p></p><p>doc1</p><p>doc2</p><p>doc3</p><p>文档4</p><p>knn</p><p>0.347</p><p>0.35</p><p>0.348</p><p>0.346</p><p>bm25</p><p>0.63</p><p>0.01</p><p>0.3</p><p>0.4</p><p>您可以从上面看到这种差异：<code>kNN</code> 分数介于 0 和 1 之间，而<code>bm25</code> 分数可能相差悬殊。这种差异使得设置静态最佳权重以合并结果变得非常棘手。</p><h2>归一化拯救：MinMax 归一化器</h2><p>为了解决这个问题，我们引入了一个可选的<code>minmax</code> 归一化器，该归一化器使用以下公式将每个查询的分数独立缩放至<code>[0, 1]</code> 范围：</p><p>这就保留了每个文档在查询结果集中的相对重要性，从而更容易合并来自不同检索器的得分。正常化后，分数变为</p><p>查询 A 得分：</p><p></p><p>doc1</p><p>doc2</p><p>doc3</p><p>文档4</p><p>knn</p><p>0.347</p><p>0.35</p><p>0.348</p><p>0.346</p><p>bm25</p><p>1.00</p><p>0.01</p><p>0.005</p><p>0.000</p><p>查询 B 得分：</p><p></p><p>doc1</p><p>doc2</p><p>doc3</p><p>文档4</p><p>knn</p><p>0.347</p><p>0.35</p><p>0.348</p><p>0.346</p><p>bm25</p><p>1.00</p><p>0.000</p><p>0.465</p><p>0.645</p><p>现在，所有得分都在<code>[0, 1]</code> 范围内，加权总和的优化也更加简单明了，因为我们现在捕捉的是结果的重要性（相对于查询而言），而不是绝对得分，并能在不同查询中保持一致。</p><h2>线性寻回器示例 </h2><p>现在，让我们通过一个例子来展示上述内容，以及<code>linear</code> Retriever 如何解决<code>rrf</code> 的一些不足之处。RRF 仅依靠相对排名，不考虑实际分数差异。例如，给出这些分数：</p><p></p><p>doc1</p><p>doc2</p><p>doc3</p><p>文档4</p><p>knn</p><p>0.347</p><p>0.35</p><p>0.348</p><p>0.346</p><p>bm25</p><p>100</p><p>1.5</p><p>1</p><p>0.5</p><p>rrf 分数</p><p>0.03226</p><p>0.03252</p><p>0.03200</p><p>0.03125</p><p>rrf 会将文件排序为</p><p>但是，doc1 的<code>bm25</code> 得分明显高于其他文件，而<code>rrf</code> 只查看相对排名，因此未能捕捉到这一点。<code>linear</code> Retriever 结合归一化处理，可以正确地考虑分数及其差异，从而得出更有意义的排名：</p><p></p><p>doc1</p><p>doc2</p><p>doc3</p><p>文档4</p><p>knn</p><p>0.347</p><p>0.35</p><p>0.348</p><p>0.346</p><p>bm25</p><p>1</p><p>0.01</p><p>0.005</p><p>0</p><p>如上图所示，doc1 的优秀排名和<code>score</code> 的<code>bm25</code> 都得到了适当的考虑，并反映在最终得分上。此外，所有分数现在都在<code>[0, 1]</code> 范围内，这样我们就能以更直观的方式对它们进行比较和组合（甚至建立离线优化流程）。</p><h2>将所有内容整合在一起</h2><p>要充分利用<code>linear</code> 检索器的正常化功能，搜索请求应如下所示：</p>GET linear_retriever_blog/_search
{
   "retriever": {
       "linear": {
           "retrievers": [
               {
                   "retriever": {
                       "knn": {
                          ...
                        }
                    },
                   "weight": 5
               },
                  {
                   "retriever": {
                       "standard": {
                          ...
                        }
                    },
                   "weight": 1.5,
                   "normalizer": "minmax"
               },


           ]
       }
   }
}<p>这种方法结合了两方面的优点：既保留了<code>linear</code> Retriever 的灵活性和直观评分，又通过 MinMax 归一化确保了一致的评分缩放。</p><p>与我们所有的检索工具一样，<code>linear</code> 检索工具可以集成到分层检索树的任何层级中，并支持可解释性、匹配高亮、字段折叠等功能。</p><h2>何时选择线性寻回犬，为什么会有区别</h2><p><code>linear</code> 猎犬：</p><ul><li><p>通过利用实际得分，而不仅仅是排名，来保留相对重要性。</p></li><li><p>允许利用不同查询的加权贡献进行微调。</p></li><li><p>利用规范化增强一致性，使混合搜索更稳健、更可预测。</p></li></ul><h2>结论</h2><p><code>linear</code> retriever 已经在 Elasticsearch Serverless 以及 8.18 和 9.0 版本中可用！更多示例和配置参数可参阅我们的文档。试用一下，看看它如何改善您的混合搜索体验--我们期待您的反馈。搜索愉快</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/linear-retriever-hybrid-search</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/linear-retriever-hybrid-search</guid>
    <category><![CDATA[相关性]]></category>
    <category><![CDATA[混合搜索]]></category>
    <dc:creator><![CDATA[Panagiotis Bailis]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte58a751cbcc1153d/6a17e3c76317305c4f585a10/7a07e27e3095463ff93b4cb7f8a0cf3b8e44eab0-1777x1000.png" length="0" type="image/png"/>
    <pubDate>Wed, 28 May 2025 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>