<?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/jp/search-labs/author/panagiotis-bailis</link>
    </image>
    <link>https://www.elastic.co/jp/search-labs/author/panagiotis-bailis</link>
    <atom:link href="https://www.elastic.co/jp/search-labs/rss/author/panagiotis-bailis.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[jp]]></language>
    <lastBuildDate>Mon, 19 Oct 2026 19:40:30 GMT</lastBuildDate>
  <item>
    <title><![CDATA[ハイブリッド検索の再考: Elasticsearch の線形リトリーバーの導入!]]></title>
    <description><![CDATA[線形リトリーバーが加重スコアと MinMax 正規化を活用してハイブリッド検索を強化し、より正確で一貫性のあるランキングを実現する方法を確認し、その使用方法を学びます。]]></description>
    <content:encoded><![CDATA[<p><a href="https://www.elastic.co/jp/search-labs/blog/elasticsearch-retrievers-ga-8.16.0">前回のブログ</a>投稿では、複雑なランキング パイプラインの作成を可能にする、ゼロから再設計されたリトリーバー フレームワークを紹介しました。また、Reciprocal Rank Fusion (RRF) リトリーバーが、異なるクエリの結果を結合してハイブリッド検索を可能にする方法についても調査しました。RRF は簡単に実装できますが、実際のスコアを無視して相対的なランクのみに焦点を当てるという、顕著な制限があります。これにより、微調整と最適化が困難になります。</p><h2>リニアレトリーバーに会いましょう！</h2><p>この投稿では、ハイブリッド検索をサポートするために最近追加された<a href="https://www.elastic.co/jp/docs/solutions/search/retrievers-overview#retrievers-overview-types"><code>linear</code></a><a href="https://www.elastic.co/jp/docs/solutions/search/retrievers-overview#retrievers-overview-types">リトリーバー</a>を紹介します。<code>rrf</code>とは異なり、 <code>linear</code>リトリーバーはドキュメントに一致したすべてのクエリの加重合計を計算します。このアプローチにより、結果セット内の各ドキュメントの相対的な重要度が維持され、各クエリが最終スコアに与える影響を正確に制御できるようになります。その結果、ハイブリッド検索を微調整するためのより直感的で柔軟な方法が提供されます。</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>注意点が 1 つあります: 使用される類似度メトリックに応じて、 <code>knn</code>スコアは厳密に制限される場合があります。たとえば、コサイン類似度または単位正規化ベクトルのドット積では、スコアは常に<code>[0, 1]</code>範囲内になります。対照的に、 <code>bm25</code>スコアは予測しにくく、明確に定義された境界がありません。</p><h2>スコアのスケーリング：kNN vs BM25</h2><p>ハイブリッド検索の課題の 1 つは、異なるリトリーバーが異なるスケールでスコアを生成することです。たとえば、次のシナリオを考えてみましょう。</p><p>クエリAのスコア:</p><p></p><p>ドキュメント1</p><p>ドキュメント2</p><p>ドキュメント3</p><p>ドキュメント4</p><p>わかる</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>ドキュメント1</p><p>ドキュメント2</p><p>ドキュメント3</p><p>ドキュメント4</p><p>わかる</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>[0, 1]</code>範囲にスケーリングするオプションの<code>minmax</code>ノーマライザーを導入しました。</p><p>これにより、クエリの結果セット内の各ドキュメントの相対的な重要度が保持され、異なるリトリーバーからのスコアを簡単に組み合わせることができます。正規化すると、スコアは次のようになります。</p><p>クエリAのスコア:</p><p></p><p>ドキュメント1</p><p>ドキュメント2</p><p>ドキュメント3</p><p>ドキュメント4</p><p>わかる</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>ドキュメント1</p><p>ドキュメント2</p><p>ドキュメント3</p><p>ドキュメント4</p><p>わかる</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>リトリーバーが<code>rrf</code>の欠点のいくつかをどのように解決しているかを見てみましょう。RRF は相対的なランクのみに依存し、実際のスコアの違いは考慮しません。たとえば、次のスコアがあるとします。</p><p></p><p>ドキュメント1</p><p>ドキュメント2</p><p>ドキュメント3</p><p>ドキュメント4</p><p>わかる</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>リトリーバーは正規化と組み合わせることで、スコアとその差異の両方を正しく考慮し、より意味のあるランキングを生成します。</p><p></p><p>ドキュメント1</p><p>ドキュメント2</p><p>ドキュメント3</p><p>ドキュメント4</p><p>わかる</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>bm25</code>の<code>score</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>リトリーバーの柔軟性と直感的なスコアリングを維持しながら、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>リトリーバーは、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>