結果内のドキュメントのスコアリング
Atlas Search または Atlas ベクトル検索クエリによって返されるすべてのドキュメントには関連性に基づいてスコアが割り当てられ、結果セットに含まれるドキュメントは最高スコアから最低スコアの順に返されます。
使用法
検索結果に各ドキュメントのスコアを含めるには、集計パイプラインの $project
ステージを使用します。
$search
ステージの場合、score
フィールドは $meta 式。これにはsearchScore
値が必要です。また、scoreDetails
フィールド$meta 式のsearchScoreDetails
値を指定し、スコアの詳細な内訳を示すことができます。注意
検索ノードを配置した場合は、次の点を考慮してください。
検索ノードによって異なる可能性があるため、
searchScore
で結果を並べ替えないでください。searchScore
を計算するために、ホストは、インデックスからまだ削除されていない削除されたドキュメントを含む、そのホストに存在するすべてのドキュメントを考慮します。削除は各ホストで個別に発生するため、クエリがルーティングされるホストに応じてsearchScore
で変更が発生する可能性があります。
検索ノードで
searchScore
で並べ替えるときにページ分割をサポートするには、 MongoDBフィードバック エンジンでこのリクエストにアップ投票します。$vectorSearch
ステージの場合、score
フィールドは $meta 式。これにベクトル検索結果内の各ドキュメントのスコアを返すにはvectorSearchScore
値が必要です。
例
次のクエリは、$project
ステージを使用して、返されるドキュメントに score
という名前のフィールドを追加します。
1 db.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 ])
1 db.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 ])
詳しくは、「検索スコアの詳細を返す」を参照してください。
1 db.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
ステージを使用すると、返された各ドキュメントのスコアを結果セットに含めることができます。ドキュメントは最高スコアから最低スコアの順に返されます。ドキュメントのスコアには、次のような多くの要因が影響します。
Lucene スコアリングアルゴリズムの詳細については、Lucene ドキュメント を参照してください。
追加オプション
デフォルトのスコアリング動作に加えて、Atlas Search は次のオプションをサポートしています。
Considerations
結果内の複数のドキュメントのスコアが同じである場合、結果内のドキュメントの順序は非決定的になります。 Atlas Search の結果を特定の順序で表示したい場合は、 ステージで[ 並び替え ]$search
オプションを含め、一意のフィールドで結果を並び替えます。 並べ替え オプションを使用して、結果をスコア別に昇順で並べ替えることもできます。詳しくは、「 Atlas 検索結果の並べ替え 」と「 スコアの例で並べ替える 」を参照してください。
個別の 検索ノード では、各ノードは、スコアが同じ場合にソートするために使用される異なる内部 Lucene ID をドキュメントに割り当てます。結果を並べ替えてページ分割する場合、クエリを処理しているノードの プロセスには、内部 mongot
ID のページ分割順序が トークン$match
よりも大きい場合、他のノードのドキュメントが含まれることがあります。これを防ぐために、 の後に を使用して、$search
によりドキュメントを除外します。_id
配列値をクエリする場合、配列内のクエリに一致する値の数に関係なく、Atlas Search は同じスコアを割り当てます。
Tutorials
Atlas Search クエリで追加の | |
一般的な Atlas Search クエリで |