結果内のドキュメントのスコアリング
Atlas 検索クエリによって返されるすべてのドキュメントには関連性に基づいてスコアが割り当てられ、結果セットに含まれるドキュメントは最高スコアから最低スコアの順に返されます。
ドキュメントのスコアには、次のような多くの要因が影響します。
注意
配列内の値をクエリする場合、Atlas Search は、クエリに一致した配列内の値の数に基づいて、一致結果のスコアを変更しません。配列内の一致の数に関係なく、スコアは単一の一致と同じになります。
返されたドキュメントに割り当てられるスコアは、ドキュメントのメタデータの一部です。集計パイプラインで $project
ステージを使用すると、返された各ドキュメントのスコアを結果セットに含めることができます。
$search
ステージの後、$project
ステージでは、score
フィールドは $meta 式。これには、searchScore
値が必要です。scoreDetails
フィールド $meta 式の searchScoreDetails
値を指定し、スコアの詳細な内訳を示すことができます。
$vectorSearch
ステージの後、$project
ステージでは、score
フィールドは $meta 式。ベクトル検索結果内の各ドキュメントのスコアを返すには、vectorSearchScore
値が必要です。
例
次のクエリは、$project
ステージを使用して、返されるドキュメントに score
という名前のフィールドを追加します。
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
ステージの後は、降順の $sort
を含める必要はありません。これは、Atlas Search が最高スコアから最低スコアの順にドキュメントを返すためです。ただし、結果内の複数のドキュメントのスコアが同じである場合、結果内のドキュメントの順序は非決定的になります。結果を特定の順序で表示したい場合は、$search
ステージで [ソート] オプションを含め、ユニークなフィールドで結果を並び替えることをお勧めします。ユニークなフィールドを指定しない場合、Atlas Search は、結果が同じスコアを持つ場合にデフォルトで結果を任意に並べ替えます。ソート オプションを使用して、結果をスコア別に昇順で並べ替えることもできます。詳しくは、「Atlas 検索結果のソート」と「スコアの例でのソート」を参照してください。
注意
Lucene スコアリング アルゴリズムの詳細については、Lucene ドキュメントを参照してください。