MongoDB Search またはMongoDB ベクトル検索クエリによって返されるすべてのドキュメントには関連性に基づいてスコアが割り当てられ、結果セットに含まれるドキュメントは最高スコアから最低スコアの順に返されます。
使用法
各ドキュメントのスコアを検索結果に含めるには、集計パイプラインで $project ステージを使用します。
$vectorSearchステージでは、scoreフィールドは$meta式をとります。これには、ベクトル検索結果内の各ドキュメントのスコアを返すためにvectorSearchScore値が必要です。
注意
次の URL を使用できます。
searchScore$searchクエリの場合のみ。vectorSearchScore$vectorSearchクエリの場合のみ
他のクエリでsearchScoreおよびvectorSearchScoreを使用すると、MongoDB は MongoDB v8.2 以降で警告をログに記録します。
例
次のクエリは、$project ステージを使用して、返されるドキュメントに score という名前のフィールドを追加します。
db.movies.aggregate([ { "$search": { "text": { <operator-specification> } } }, { "$project": { "<field-to-include>": 1, "<field-to-exclude>": 0, "score": { "$meta": "searchScore" } } }])db.movies.aggregate([ { "$search": { "text": { <operator-specification> }, "scoreDetails": true } }, { "$project": { "<field-to-include>": 1, "<field-to-exclude>": 0, "scoreDetails": { "$meta": "searchScoreDetails" } } }])詳しくは、「検索スコアの詳細を返す」を参照してください。
db.movies.aggregate([ { "$vectorSearch": { <query-syntax> } }, { "$project": { "<field-to-include>": 1, "<field-to-exclude>": 0, "score": { "$meta": "vectorSearchScore" } } }])詳細については、 MongoDB ベクトル検索 Score を参照してください。
動作
返されたドキュメントに割り当てられるスコアは、ドキュメントのメタデータの一部です。集計パイプラインで $project ステージを使用して、返された各ドキュメントのスコアを結果セットに含めることができます。ドキュメントは最高スコアから最低スコアの順に返されます。ドキュメントのスコアに影響を与える要因には、次のようなものがあります。
ドキュメント内の検索語の位置。
ドキュメント内の検索語の出現頻度。
Lucene スコアリングアルゴリズムの詳細については、Lucene ドキュメント を参照してください。
追加オプション
デフォルトのスコアリング動作に加えて、 MongoDB Search は次のオプションをサポートしています。
Considerations
結果内の複数のドキュメントのスコアが同じである場合、結果内のドキュメントの順序は非決定的になります。MongoDB Search の結果を特定の順序で表示したい場合は、 $searchステージで [ 並び替え ] オプションを含め、一意のフィールドで結果を並び替えます。並べ替え オプションを使用して、結果をスコア別に昇順で並べ替えることもできます。詳しくは、 MongoDB検索結果の並べ替え と スコアの例で並べ替える を参照してください。
個別の検索ノードでは、各ノードがドキュメントに異なる内部 Lucene ID を割り当て、スコアが同一の場合にソートに使用します。結果をソートしてページ分けする際、クエリを処理しているノードの mongot プロセスには、内部 ID のページ分け順序がトークンよりも大きい場合、他のノードのドキュメントが含まれる可能性があります。これを防ぐには、$match を $search の後に使用して、_id によってドキュメントを除外します。
配列値をクエリする場合、配列内のクエリに一致する値が多いほど、 MongoDB Search はより高いスコアを割り当てます。