Docs Menu
Docs Home
/ /

ハイブリッドAtlas Searchの実行方法

ハイブリッド検索とは、同じまたは類似のクエリ条件に対して異なる検索方法や検索クエリを集約することです。この手法では、アルゴリズムを使用して結果をランク付けし、さまざまな検索方法から統合された結果を返します。ハイブリッド検索を実行するには、 $rankFusionを使用します。

Reciprocal Rank Fusion(RRF)は、次のアクションを実行して、さまざまな検索方法の結果を1つの結果セットにまとめる手法です。

  1. 結果内のドキュメントの逆ランクを計算します。

    各検索結果内のランク付けされたドキュメントごとに、まずドキュメントの順位(r)に定数 60 を加えてスコア(rank_constant)を平滑化し、次に 1rrank_constant の合計で割って、結果内のドキュメントの逆数順位を求めます。rank_constant の値を自分で設定することはできず、デフォルトの 60 になっています。

    reciprocal_rank = 1 / ( r + rank_constant )

    各検索方法に異なる重み( w )を適用して、その検索方法の重要性を高めます。 各ドキュメントについて、重みをドキュメントの逆数ランクで乗算して重みを含む、重み付きランクを計算します。

    weighted_reciprocal_rank = w x reciprocal_rank
  2. 結果内のドキュメントのランク付けスコアと重み付けスコアを組み合わせます。

    すべての検索結果にわたるドキュメントごとに、ドキュメントの単一のスコアに対して計算された逆数ランクを追加します。

  3. 結果内のドキュメントの合計スコアで結果を並べ替えます。

    結果内のドキュメントの単一の組み合わせたランク付けリストの結果全体の合計スコアに基づいて、結果内のドキュメントをソートします。

MongoDB ベクトル検索を活用して、さまざまなタイプのハイブリッド検索を実行できます。具体的には、 MongoDB ベクトル検索 は次のユースケースをサポートします。

  • 1 つのクエリで全文検索とベクトル検索: セマンティック検索や全文検索などのさまざまな検索方法からの結果を組み合わせることができます。 $vectorSearch セマンティック検索にはを使用し、$search 全文検索結果にはを使用し、レプリカセット ランク統合手法を使用して結果を結合できます。詳細については、 「 MongoDB ベクトル検索とMongoDB Search を使用してハイブリッド検索を実行するsample_mflix.embedded_movies 」チュートリアルを参照してください。このチュートリアルでは、 名前空間に対してセマンティック検索と全文検索を実行し、逆数ランク統合を使用して組み合わせてランク付けされた結果を取得する方法を示します。

    あるいは、結果の相対的な順序付けに加えてスコアが重要になる、より粒度の高いハイブリッド検索には、$scoreFusionパイプラインステージを使用できます。詳細については、 「 MongoDB ベクトル検索とMongoDB Search を使用してハイブリッド検索を実行するsample_mflix.embedded_movies 」チュートリアルを参照してください。このチュートリアルでは、 名前空間に対してセマンティック検索と全文検索を実行し、入力パイプラインの結果を最終スコア付き結果セットに検索する方法を示します。

    $rankFusion は、入力パイプライン内の位置(相対ランク)に基づいてドキュメントをアルゴリズム付けするのに対し、$scoreFusion は入力パイプラインによって割り当てられたスコアに基づいて、結果を組み合わせるために数学式を使用してドキュメントをランク付けします。

    $rankFusion では、ランキングはパイプラインの重みに影響されます。$scoreFusion では、重みは最終結果への各パイプラインのスコアの貢献を制御します。

  • 1 つのクエリ内での複数のベクトル検索クエリ: MongoDB $rankFusion パイプラインは、同じコレクションに対して実行され、その結果をreciprocal rank fusionによって結合するベクトル検索クエリを含んだ複数のサブパイプラインをサポートしています。「複数の$vectorSearchクエリを組み合わせる方法」チュートリアルでは、次のタイプのベクトル検索について解説します。

    • 同じクエリ内でセマンティックが類似した用語をデータセット全体で包括的に検索する

    • データセット内の複数のフィールドを検索し、どのフィールドがクエリに対して最適な結果を返すかを判断する

    • 異なる埋め込みモデルの埋め込みを使用して検索し、各モデルのセマンティックな解釈の差異を特定する

ハイブリッド検索に $rankFusion または $scoreFusion のパイプラインステージを使用する場合は、次の点を考慮してください。

1つの検索方法で捉えられなかった偽陰性を捕捉する際は、個々のサブパイプラインからの結果が不連続であっても許容可能な場合があります。不連続な結果が出た場合、結果のほとんどまたはすべてが一方のパイプラインから返され、もう一方のパイプラインからは返されないように見えることがあります。ただし、すべてのサブパイプラインが同様の結果を返すようにしたい場合は、サブパイプラインごとの結果数を増やしてみてください。

各クエリの結果の関連性を高めるために、すべてのクエリに静的な重みを設定するのではなく、レキシカルクエリとベクトルクエリをクエリごとに重み付けすることをお勧めします。これにより、リソースを最も必要とするクエリに割り当てることで、計算リソースの利用効率が向上します。

$rankFusion または $scoreFusion ステージでは任意の数のサブパイプラインを組み合わせることができますが、これらはすべて同じコレクションに対して実行する必要があります 。$rankFusion または $scoreFusion ステージを使用してコレクション全体を検索することはできません。クロスコレクション検索には、$unionWith $vectorSearchとともに ステージを使用します。

検索パイプラインを必要とすることなくコレクション内の特定のフィールドをブーストするには、パイプライン内で$match$sortなどを使用することが推奨されます。

内で $geoNear$search near 演算子を使用して、$rankFusion または$scoreFusion ステージ内で地理的ロケーションを検索できます。ただし、$geoNearnear 演算子は使用する座標参照フレームが異なります。そのため、結果の序数とスコアは同一ではない可能性があります。

各サブパイプラインに返される結果の数に制限を設定することをお勧めします。

ファジー検索、フレーズ一致、ロケーション フィルタリング、ワイルドカード パターン一致などの分析テキスト機能を含む$search 演算子を使用してベクトル検索のデータを事前にフィルタリングする場合は、vectorSearch ( MongoDB Search 演算子)を使用することをお勧めします。 。

$rankFusion$scoreFusion を使用するハイブリッド検索には次の制限が適用されます。

  • $rankFusion はMongoDB 8.0 以降(自動アップグレード付きの最新バージョンを含む)でのみサポートされています。

    注意

    8.0.X バージョンで $rankFusion を使用するには、サポートケースを開く必要があります。8.0 からアップグレードする場合、$rankFusion クエリの実行を一時停止する必要がある場合があります。

  • $rankFusion および $scoreFusion サブパイプラインには、次のステージのみを含めることができます。

  • $rankFusion$scoreFusion は、各サブパイプラインの元の入力ドキュメントへの追跡可能なリンクを保持します。したがって、以下はサポートされていません。

  • $rankFusion サブパイプラインと $scoreFusion サブパイプラインは、並列ではなく連続して実行されます。

  • $rankFusion$scoreFusion はページ分割をサポートしていません。

  • rankFusion は、 MongoDB8.0 以上を実行中クラスターのビューでのみ実行できます。ビュー定義 内または時系列コレクションで rankFusion を実行することはできません。

これらのチュートリアルを試すには、以下のものが必要です。

  • MongoDBバージョン v8.0 以降のクラスター。

  • sample_mflixデータベースがクラスターにロードされました。

  • mongosh クラスターでクエリを試す

    注意

    また、Atlas CLI を使用して作成したローカル Atlas 配置や、自己管理型(オンプレミス)配置で、これらのハイブリッド検索のユースケースを試すこともできます。詳細については、「Atlas 配置のローカル配置の作成」を参照してください。

戻る

テキストのセマンティック検索

項目一覧