Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/
Atlas
/ / / /

結果内のドキュメントのスコアリング

Atlas Search または Atlas Vector Search クエリによって返されるすべてのドキュメントには関連性に基づいてスコアが割り当てられ、結果セットに含まれるドキュメントは最高スコアから最低スコアの順に返されます。

各ドキュメントのスコアを検索結果に含めるには、集計パイプラインの$project ステージを使用します。

  • $search ステージでは、score フィールドは $meta 式をとり、これには searchScore 値が必要です。scoreDetails フィールド $meta 式の searchScoreDetails 値を指定し、スコアの詳細な内訳を示すこともできます。

    注意

    検索ノードを配置した場合は、次の点を考慮してください。

    • 検索ノード間で結果が異なる可能性があるため、searchScore で結果を並べ替えないでください。

    • searchScore を計算するには、ホストはその上に存在するすべてのドキュメントを考慮に入れます。その中には、削除済みのドキュメントでインデックスからはまだ削除されていないものも含まれます。削除は各ホストで個別に発生するため、クエリがどのホストでルーティングされるかに応じて searchScore が変動することがあります。

    検索ノードで searchScore に基づくソート時にページ分割をサポートするには、MongoDB フィードバックエンジンでこちらのリクエストに投票してください。

  • $vectorSearchステージでは、score フィールドは $meta 式をとり、これには、ベクトル検索結果内の各ドキュメントのスコアを返すために vectorSearchScore 値が必要です。

次のクエリは、$project ステージを使用して、返されるドキュメントに score という名前のフィールドを追加します。

1db.movies.aggregate([
2 {
3 "$search": {
4 "text": {
5 <operator-specification>
6 }
7 }
8 },
9 {
10 "$project": {
11 "<field-to-include>": 1,
12 "<field-to-exclude>": 0,
13 "score": { "$meta": "searchScore" }
14 }
15 }
16])
1db.movies.aggregate([
2 {
3 "$search": {
4 "text": {
5 <operator-specification>
6 },
7 "scoreDetails": true
8 }
9 },
10 {
11 "$project": {
12 "<field-to-include>": 1,
13 "<field-to-exclude>": 0,
14 "scoreDetails": { "$meta": "searchScoreDetails" }
15 }
16 }
17])

詳しくは、「検索スコアの詳細を返す」を参照してください。

1db.movies.aggregate([
2 {
3 "$vectorSearch": {
4 <query-syntax>
5 }
6 },
7 {
8 "$project": {
9 "<field-to-include>": 1,
10 "<field-to-exclude>": 0,
11 "score": { "$meta": "vectorSearchScore" }
12 }
13 }
14])

詳細については、「Atlas Vector Search Score」を参照してください。

返されたドキュメントに割り当てられるスコアは、ドキュメントのメタデータの一部です。集計パイプラインで $project ステージを使用して、返された各ドキュメントのスコアを結果セットに含めることができます。ドキュメントは最高スコアから最低スコアの順に返されます。ドキュメントのスコアに影響を与える要因には、次のようなものがあります。

  • ドキュメント内の検索語の位置。

  • ドキュメント内の検索語の出現頻度。

  • Atlas Search クエリが使用する演算子またはアナライザのタイプ。

Lucene スコアリング アルゴリズムの詳細については、 Lucene のドキュメントを参照してください。

デフォルトのスコアリング動作に加えて、Atlas Search は以下のオプションをサポートしています。

  • 特定のドキュメントに割り当てられたスコアを修正します。

  • スコアの詳細オプションを使用して、スコアの詳細な内訳を返します。

  • 検索スコアを正規化します。

結果内の複数のドキュメントのスコアが同じである場合、結果内のドキュメントの順序は非決定的になります。Atlas Search の結果に決まった順序を付けたい場合は、sort オプションを $search ステージに追加して、結果を一意のフィールドで並べ替えます。sort オプションを使用して、結果をスコア別に昇順で並べ替えることもできます。詳しくは、「Atlas 検索結果のソート」と「スコアの例でのソート」を参照してください。

個別の検索ノードでは、各ノードがドキュメントに異なる内部 Lucene ID を割り当て、スコアが同一の場合にソートに使用します。結果をソートしてページ分割する際、クエリを処理しているノードの mongot プロセスには、内部 ID のページネーション順序がトークンよりも大きい場合、他のノードのドキュメントが含まれる可能性があります。これを防ぐには、$match$search の後に使用して、_id によってドキュメントを除外します。

配列の値をクエリする際、Atlas Search は、配列内でクエリに一致する値の数に関係なく、同一のスコアを割り当てます。

Atlas Search クエリで追加の score オプションを使用する例については、次のページをご覧ください。

一般的な Atlas Search 検索クエリで score フィールドを使用する例については、次のページをご覧ください。

戻る

検索オプション

項目一覧