Docs Menu
Docs Home
/
MongoDB Atlas
/ / /

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

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

ドキュメントのスコアには、次のような多くの要因が影響します。

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

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

  • クエリで使用される 演算子の型。

  • クエリが使用するアナライザの型。

注意

配列内の値をクエリする場合、Atlas Search は、クエリに一致した配列内の値の数に基づいて、一致結果のスコアを変更しません。配列内の一致の数に関係なく、スコアは単一の一致と同じになります。

返されたドキュメントに割り当てられるスコアは、ドキュメントのメタデータの一部です。集計パイプラインで $project ステージを使用すると、返された各ドキュメントのスコアを結果セットに含めることができます。

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

$vectorSearch ステージの後、$project ステージでは、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 ステージの後は、降順の $sort を含める必要はありません。これは、Atlas Search が最高スコアから最低スコアの順にドキュメントを返すためです。ただし、結果内の複数のドキュメントのスコアが同じである場合、結果内のドキュメントの順序は非決定的になります。結果を特定の順序で表示したい場合は、$search ステージで [ソート] オプションを含め、ユニークなフィールドで結果を並び替えることをお勧めします。ユニークなフィールドを指定しない場合、Atlas Search は、結果が同じスコアを持つ場合にデフォルトで結果を任意に並べ替えます。ソート オプションを使用して、結果をスコア別に昇順で並べ替えることもできます。詳しくは、「Atlas 検索結果のソート」と「スコアの例でのソート」を参照してください。

注意

個別の検索ノードでは、各ノードに異なる内部 ID を持つドキュメントの独自のコピーがあり、複数のドキュメントが同じスコアを持つ場合に、Lucene が結果を並べ替えるために使用されます。クエリを処理していないノード上のドキュメントの内部 ID のページネーション順序がページネーション トークンよりも大きい場合、結果を並び替え、ページ割りする際に、クエリを処理しているノードの mongot は、それを結果に含める可能性があります。これを軽減するには、$search の後に $match を使用して、 _id によりドキュメントを除外します。

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

戻る

3.クエリ パスの構築