Docs Menu

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

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

検索結果に各ドキュメントのスコアを含めるには、集計パイプラインの $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 の結果を特定の順序で表示したい場合は、 ステージで[ 並び替え ]$search オプションを含め、一意のフィールドで結果を並び替えます。 並べ替え オプションを使用して、結果をスコア別に昇順で並べ替えることもできます。詳しくは、「 Atlas 検索結果の並べ替え 」と「 スコアの例で並べ替える 」を参照してください。

個別の 検索ノード では、各ノードは、スコアが同じ場合にソートするために使用される異なる内部 Lucene ID をドキュメントに割り当てます。結果を並べ替えてページ分割する場合、クエリを処理しているノードの プロセスには、内部 mongotID のページ分割順序が トークン$match よりも大きい場合、他のノードのドキュメントが含まれることがあります。これを防ぐために、 の後に を使用して、$search によりドキュメントを除外します。_id

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

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

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