$search ステージで scoreDetailsブール値オプションを使用すると、クエリ結果内の各ドキュメントのスコアの詳細な内訳を示すことができます。
scoreDetails: true を$searchステージで設定すると、MongoDB 検索するは一致する各ドキュメントの詳細なスコアリング情報を返します。この情報は、ドキュメントがクエリに一致し、検索結果で関連性スコアを受け取った理由を説明します。
デフォルトでは 、スコアリングは bm25 式に基づいています。
期間頻度:ドキュメントに検索期間が表示される頻度
逆のドキュメント頻度: すべてのドキュメント間での検索する期間の一般性
フィールド長: クエリに一致するフィールドの長さ
scoreDetails オプションはこれらの要素を分析することで、ドキュメントがクエリに一致し、そのスコアを受け取った理由を分析するのに役立ちます。
メタデータを表示するには、 ステージで $meta $project式を使用する必要があります。
構文
{ "$search": { "<operator>": { <operator-specification> }, "scoreDetails": true | false } }, { "$project": { "scoreDetails": {"$meta": "searchScoreDetails"} } }
オプション
$search ステージでは、 scoreDetailsブール値オプションは次のいずれかの値を取ります。
true- 結果にドキュメントのスコアの詳細を含める場合。trueに設定すると、 MongoDB Search は結果の各ドキュメントのスコアの詳細な内訳を返します。これにより、特定のドキュメントがMongoDB 検索クエリに一致した理由に関する情報が提供されます。詳細については、出力を参照してください。false- 結果のスコア内訳の詳細を除外します。 (デフォルト)
省略した場合、 scoreDetailsオプションはデフォルトでfalseになります。
$project ステージでは、 scoreDetailsフィールドは$meta式。これには、次の値が必要です。
| 結果内の各ドキュメントのスコアの詳細な内訳を返します。 |
出力
scoreDetailsオプションは、結果内の各ドキュメントのscoreDetailsオブジェクト内のdetails配列の次のフィールドを返します。
フィールド | タイプ | 説明 |
|---|---|---|
| float | |
| string | ドキュメントがスコア付けされた方法と、スコアの計算に考慮された要素に関する詳細を含む、スコアリング式のサブセット。 最上位の 詳細については、「 スコアに貢献する要因 」を参照してください。 |
| オブジェクトの配列 | スコアリング 式のサブセットに基づく、ドキュメント内の各一致のスコアの内訳。 値は、 構造内で再帰的なスコア詳細オブジェクトの配列です。 |
スコアに貢献する要因
異なるクエリ演算子は、結果に含まれる各ドキュメントの searchScore を計算するために異なるアルゴリズムを使用します。次のセクションでは、一般的なクエリ演算子がスコアリングを取り扱う方法について説明します。
text、phrase、queryString、autocomplete 演算子
デフォルトでは、text、phrase、queryString、autocomplete の各演算子は、bm25 の類似性アルゴリズムを用いてドキュメントのスコアを算出します。
複数のクエリでコンシステントな結果が必要な場合、特に以下の両方が当てはまる場合は、stableTfl またはboolean アルゴリズムを使用することをお勧めします。
アプリケーションは結果を
searchScoreで並べ替え、結果をページ区切りします。これは、重複やドキュメントのスキップを防ぐために決定論的スコアリングに依存しています。配置で専用の MongoDB Search ノード を使用しているか、読み込み設定が
secondaryまたはnearestに設定されている場合、初期およびその後のクエリが異なる MongoDB Search ノードにルーティングされる可能性が高くなります。
bm25 後続のクエリ間でスコアが一貫していない可能性があります。各 MongoDB Search ノードは MongoDB Search インデックスをビルドし、更新および削除操作を独立して実行します。その結果、ドキュメント コーパスは異なる MongoDB Search ノード間で異なる可能性があります。bm25 の計算はドキュメント コーパスに依存するため、異なる MongoDB Search ノードにルーティングされるクエリでは、同じドキュメントに対して異なる bm25 スコアが計算される可能性があります。
異なる類似性アルゴリズムを使用するには、MongoDB Search インデックス定義で similarity.type プロパティを、MongoDB Search string または autocomplete 型としてインデックスするフィールドに対して指定します。これらの型に対する MongoDB Search インデックスの設定方法については、「string フィールドのインデックス作成方法」あるいは「オートコンプリートのためのフィールドのインデックス作成方法 」を参照してください。
MongoDB Search インデックス定義でsimilarity.type プロパティを指定する際には、以下の類似性アルゴリズムから選ぶことができます。
bm25
bm25 は、次の基づいてドキュメントをランク付けする一般的なランキングアルゴリズムです。
期間頻度:ドキュメントに検索期間が表示される頻度
逆のドキュメント頻度: すべてのドキュメント間での検索する期間の一般性
フィールド長: クエリに一致するフィールドの長さ
bm25 はスコアを boost * idf * tf として計算し、各因子は次のように定義されます。
係数 | 説明 | |
|---|---|---|
| クエリ演算子の | |
| クエリの逆ドキュメント頻度。MongoDB Search は、次の式を使用して頻度を計算します。 以下の条件に一致するもの。
| |
| ターム頻度。MongoDB Search は、次の式を使用して頻度を計算します。 以下の条件に一致するもの。
|
ブール値
boolean 各クエリ用語がドキュメント内に存在するかどうかを確認し、見つかった用語の数をカウントするスコアリングアルゴリズムです。一致する用語はすべて均等に扱われ、用語の重要性や頻度は調整されません。
boolean の場合、スコアはドキュメント内に存在するすべてのクエリ用語の合計として計算されます。各用語がドキュメント内に存在する場合、スコアに 1 の値を加算します。
stableTfl
stableTfl は、用語の長さを使用して用語の希少性を導き出すカスタム MongoDB Search ランキングアルゴリズムです。これは、長い単語は出現頻度が低い(より稀である)というジップの法則に基づいています。
stableTfl はスコアを boost * tr * tf として計算し、各因子は次のように定義されます。
係数 | 説明 | |
|---|---|---|
| クエリ演算子の | |
| 減衰関数。MongoDB Search は、次の式を使用して減衰関数を計算します。 以下の条件に一致するもの。
| |
| 用語の希少性。MongoDB Search は以下の式で用語の希少性を計算します。 以下の条件に一致するもの。
| |
| ジップの法則に基づく確率関数。MongoDB Search は、次の式を使用して、クエリ用語がドキュメントに表示される確率を計算します。 以下の条件に一致するもの。
|
near 演算子
near 演算子は、距離減衰関数を用いてドキュメントにスコアを付けます。MongoDB Search の結果と、origin値として設定した数字、日付、または地理的点との近さを測定します。
距離減衰関数はスコアを pivot / (pivot +
distance)次のように計算します。各係数は次のように定義されます。
係数 | 説明 | |
|---|---|---|
|
| |
|
以下の条件に一致するもの。
|
例
次の例は、次の の結果内のスコアの詳細を取得する方法を示しています。
クエリは、テキスト、ほぼ、複合、および埋め込みドキュメント演算子を使用して実行されます。
functionオプション式を使用してスコアが変更されたクエリ。
Tip
オブジェクトの配列で再帰的にスコアの詳細を表示するには、次のコマンドを実行してmongoshの設定を構成します。
config.set('inspectDepth', Infinity)
演算子の例
次の例は、$searchscoreDetails テキスト 、 近似 、 複合 、 embeddedDocument 演算子クエリの結果内のドキュメントに対して オプションを使用してスコアの内訳を検索する方法を示しています。
カスタム スコアの例
$searchscoreDetails次の例は、sample_mflix.movies コレクションに対する 関数式のサンプル クエリの結果内のドキュメントに対して オプションを使用してスコアの内訳を取得する方法を示しています。
1 db.movies.aggregate([{ 2 "$search": { 3 "text": { 4 "path": "title", 5 "query": "men", 6 "score": { 7 "function":{ 8 "multiply":[ 9 { 10 "path": { 11 "value": "imdb.rating", 12 "undefined": 2 13 } 14 }, 15 { 16 "score": "relevance" 17 } 18 ] 19 } 20 } 21 }, 22 "scoreDetails": true 23 } 24 }, 25 { 26 $limit: 5 27 }, 28 { 29 $project: { 30 "_id": 0, 31 "title": 1, 32 "score": { "$meta": "searchScore" }, 33 "scoreDetails": {"$meta": "searchScoreDetails"} 34 } 35 }])
[ { title: 'Men...', score: 23.431293487548828, scoreDetails: { value: 23.431293487548828, description: 'FunctionScoreQuery($type:string/title:men, scored by (imdb.rating * scores)) [BM25Similarity], result of:', details: [ { value: 23.431293487548828, description: '(imdb.rating * scores)', details: [] } ] } }, { title: '12 Angry Men', score: 22.080968856811523, scoreDetails: { value: 22.080968856811523, description: 'FunctionScoreQuery($type:string/title:men, scored by (imdb.rating * scores)) [BM25Similarity], result of:', details: [ { value: 22.080968856811523, description: '(imdb.rating * scores)', details: [] } ] } }, { title: 'X-Men', score: 21.34803581237793, scoreDetails: { value: 21.34803581237793, description: 'FunctionScoreQuery($type:string/title:men, scored by (imdb.rating * scores)) [BM25Similarity], result of:', details: [ { value: 21.34803581237793, description: '(imdb.rating * scores)', details: [] } ] } }, { title: 'X-Men', score: 21.34803581237793, scoreDetails: { value: 21.34803581237793, description: 'FunctionScoreQuery($type:string/title:men, scored by (imdb.rating * scores)) [BM25Similarity], result of:', details: [ { value: 21.34803581237793, description: '(imdb.rating * scores)', details: [] } ] } }, { title: 'Matchstick Men', score: 21.05954933166504, scoreDetails: { value: 21.05954933166504, description: 'FunctionScoreQuery($type:string/title:men, scored by (imdb.rating * scores)) [BM25Similarity], result of:', details: [ { value: 21.05954933166504, description: '(imdb.rating * scores)', details: [] } ] } } ]
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "path": "title", 6 "query": "men", 7 "score": { 8 "function":{ 9 "constant": 3 10 } 11 } 12 }, 13 "scoreDetails": true 14 } 15 }, 16 { 17 $limit: 5 18 }, 19 { 20 $project: { 21 "_id": 0, 22 "title": 1, 23 "score": { "$meta": "searchScore" }, 24 "scoreDetails": {"$meta": "searchScoreDetails"} 25 } 26 } 27 ])
[ { title: 'Men Without Women', score: 3, scoreDetails: { value: 3, description: 'FunctionScoreQuery($type:string/title:men, scored by constant(3.0)) [BM25Similarity], result of:', details: [ { value: 3, description: 'constant(3.0)', details: [] } ] } }, { title: 'One Hundred Men and a Girl', score: 3, scoreDetails: { value: 3, description: 'FunctionScoreQuery($type:string/title:men, scored by constant(3.0)) [BM25Similarity], result of:', details: [ { value: 3, description: 'constant(3.0)', details: [] } ] } }, { title: 'Of Mice and Men', score: 3, scoreDetails: { value: 3, description: 'FunctionScoreQuery($type:string/title:men, scored by constant(3.0)) [BM25Similarity], result of:', details: [ { value: 3, description: 'constant(3.0)', details: [] } ] } }, { title: "All the King's Men", score: 3, scoreDetails: { value: 3, description: 'FunctionScoreQuery($type:string/title:men, scored by constant(3.0)) [BM25Similarity], result of:', details: [ { value: 3, description: 'constant(3.0)', details: [] } ] } }, { title: 'The Men', score: 3, scoreDetails: { value: 3, description: 'FunctionScoreQuery($type:string/title:men, scored by constant(3.0)) [BM25Similarity], result of:', details: [ { value: 3, description: 'constant(3.0)', details: [] } ] } } ]
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "path": "title", 6 "query": "shop", 7 "score": { 8 "function":{ 9 "gauss": { 10 "path": { 11 "value": "imdb.rating", 12 "undefined": 4.6 13 }, 14 "origin": 9.5, 15 "scale": 5, 16 "offset": 0, 17 "decay": 0.5 18 } 19 } 20 } 21 }, 22 "scoreDetails": true 23 } 24 }, 25 { 26 "$limit": 10 27 }, 28 { 29 "$project": { 30 "_id": 0, 31 "title": 1, 32 "score": { "$meta": "searchScore" }, 33 "scoreDetails": {"$meta": "searchScoreDetails"} 34 } 35 } 36 ])
[ { title: 'The Shop Around the Corner', score: 0.9471074342727661, scoreDetails: { value: 0.9471074342727661, description: 'FunctionScoreQuery($type:string/title:shop, scored by exp((max(0, |imdb.rating - 9.5| - 0.0)^2) / 2 * (5.0^2 / 2 * ln(0.5)))) [BM25Similarity], result of:', details: [ { value: 0.9471074342727661, description: 'exp((max(0, |imdb.rating - 9.5| - 0.0)^2) / 2 * (5.0^2 / 2 * ln(0.5)))', details: [] } ] } }, { title: 'Exit Through the Gift Shop', score: 0.9471074342727661, scoreDetails: { value: 0.9471074342727661, description: 'FunctionScoreQuery($type:string/title:shop, scored by exp((max(0, |imdb.rating - 9.5| - 0.0)^2) / 2 * (5.0^2 / 2 * ln(0.5)))) [BM25Similarity], result of:', details: [ { value: 0.9471074342727661, description: 'exp((max(0, |imdb.rating - 9.5| - 0.0)^2) / 2 * (5.0^2 / 2 * ln(0.5)))', details: [] } ] } }, { title: 'The Shop on Main Street', score: 0.9395227432250977, scoreDetails: { value: 0.9395227432250977, description: 'FunctionScoreQuery($type:string/title:shop, scored by exp((max(0, |imdb.rating - 9.5| - 0.0)^2) / 2 * (5.0^2 / 2 * ln(0.5)))) [BM25Similarity], result of:', details: [ { value: 0.9395227432250977, description: 'exp((max(0, |imdb.rating - 9.5| - 0.0)^2) / 2 * (5.0^2 / 2 * ln(0.5)))', details: [] } ] } }, { title: 'Chop Shop', score: 0.8849083781242371, scoreDetails: { value: 0.8849083781242371, description: 'FunctionScoreQuery($type:string/title:shop, scored by exp((max(0, |imdb.rating - 9.5| - 0.0)^2) / 2 * (5.0^2 / 2 * ln(0.5)))) [BM25Similarity], result of:', details: [ { value: 0.8849083781242371, description: 'exp((max(0, |imdb.rating - 9.5| - 0.0)^2) / 2 * (5.0^2 / 2 * ln(0.5)))', details: [] } ] } }, { title: 'Little Shop of Horrors', score: 0.8290896415710449, scoreDetails: { value: 0.8290896415710449, description: 'FunctionScoreQuery($type:string/title:shop, scored by exp((max(0, |imdb.rating - 9.5| - 0.0)^2) / 2 * (5.0^2 / 2 * ln(0.5)))) [BM25Similarity], result of:', details: [ { value: 0.8290896415710449, description: 'exp((max(0, |imdb.rating - 9.5| - 0.0)^2) / 2 * (5.0^2 / 2 * ln(0.5)))', details: [] } ] } }, { title: 'The Suicide Shop', score: 0.7257778644561768, scoreDetails: { value: 0.7257778644561768, description: 'FunctionScoreQuery($type:string/title:shop, scored by exp((max(0, |imdb.rating - 9.5| - 0.0)^2) / 2 * (5.0^2 / 2 * ln(0.5)))) [BM25Similarity], result of:', details: [ { value: 0.7257778644561768, description: 'exp((max(0, |imdb.rating - 9.5| - 0.0)^2) / 2 * (5.0^2 / 2 * ln(0.5)))', details: [] } ] } }, { title: 'A Woman, a Gun and a Noodle Shop', score: 0.6559237241744995, scoreDetails: { value: 0.6559237241744995, description: 'FunctionScoreQuery($type:string/title:shop, scored by exp((max(0, |imdb.rating - 9.5| - 0.0)^2) / 2 * (5.0^2 / 2 * ln(0.5)))) [BM25Similarity], result of:', details: [ { value: 0.6559237241744995, description: 'exp((max(0, |imdb.rating - 9.5| - 0.0)^2) / 2 * (5.0^2 / 2 * ln(0.5)))', details: [] } ] } }, { title: 'Beauty Shop', score: 0.6274620294570923, scoreDetails: { value: 0.6274620294570923, description: 'FunctionScoreQuery($type:string/title:shop, scored by exp((max(0, |imdb.rating - 9.5| - 0.0)^2) / 2 * (5.0^2 / 2 * ln(0.5)))) [BM25Similarity], result of:', details: [ { value: 0.6274620294570923, description: 'exp((max(0, |imdb.rating - 9.5| - 0.0)^2) / 2 * (5.0^2 / 2 * ln(0.5)))', details: [] } ] } } ]
1 db.movies.aggregate([{ 2 "$search": { 3 "text": { 4 "path": "title", 5 "query": "men", 6 "score": { 7 "function":{ 8 "path": { 9 "value": "imdb.rating", 10 "undefined": 4.6 11 } 12 } 13 } 14 }, 15 "scoreDetails": true 16 } 17 }, 18 { 19 $limit: 5 20 }, 21 { 22 $project: { 23 "_id": 0, 24 "title": 1, 25 "score": { "$meta": "searchScore" }, 26 "scoreDetails": {"$meta": "searchScoreDetails"} 27 } 28 }])
[ { title: '12 Angry Men', score: 8.899999618530273, scoreDetails: { value: 8.899999618530273, description: 'FunctionScoreQuery($type:string/title:men, scored by imdb.rating) [BM25Similarity], result of:', details: [ { value: 8.899999618530273, description: 'imdb.rating', details: [] } ] } }, { title: 'The Men Who Built America', score: 8.600000381469727, scoreDetails: { value: 8.600000381469727, description: 'FunctionScoreQuery($type:string/title:men, scored by imdb.rating) [BM25Similarity], result of:', details: [ { value: 8.600000381469727, description: 'imdb.rating', details: [] } ] } }, { title: 'No Country for Old Men', score: 8.100000381469727, scoreDetails: { value: 8.100000381469727, description: 'FunctionScoreQuery($type:string/title:men, scored by imdb.rating) [BM25Similarity], result of:', details: [ { value: 8.100000381469727, description: 'imdb.rating', details: [] } ] } }, { title: 'X-Men: Days of Future Past', score: 8.100000381469727, scoreDetails: { value: 8.100000381469727, description: 'FunctionScoreQuery($type:string/title:men, scored by imdb.rating) [BM25Similarity], result of:', details: [ { value: 8.100000381469727, description: 'imdb.rating', details: [] } ] } }, { title: 'The Best of Men', score: 8.100000381469727, scoreDetails: { value: 8.100000381469727, description: 'FunctionScoreQuery($type:string/title:men, scored by imdb.rating) [BM25Similarity], result of:', details: [ { value: 8.100000381469727, description: 'imdb.rating', details: [] } ] } } ]
1 db.movies.aggregate([{ 2 "$search": { 3 "text": { 4 "path": "title", 5 "query": "men", 6 "score": { 7 "function":{ 8 "score": "relevance" 9 } 10 } 11 }, 12 "scoreDetails": true 13 } 14 }, 15 { 16 $limit: 5 17 }, 18 { 19 $project: { 20 "_id": 0, 21 "title": 1, 22 "score": { "$meta": "searchScore" }, 23 "scoreDetails": {"$meta": "searchScoreDetails"} 24 } 25 }])
[ { title: 'Men...', score: 3.4457783699035645, scoreDetails: { value: 3.4457783699035645, description: 'FunctionScoreQuery($type:string/title:men, scored by scores) [BM25Similarity], result of:', details: [ { value: 3.4457783699035645, description: 'weight($type:string/title:men in 4705) [BM25Similarity], result of:', details: [ { value: 3.4457783699035645, description: 'score(freq=1.0), computed as boost * idf * tf from:', details: [ { value: 5.5606818199157715, description: 'idf, computed as log(1 + (N - n + 0.5) / (n + 0.5)) from:', details: [ { value: 90, description: 'n, number of documents containing term', details: [] }, { value: 23529, description: 'N, total number of documents with field', details: [] } ] }, { value: 0.6196683645248413, description: 'tf, computed as freq / (freq + k1 * (1 - b + b * dl / avgdl)) from:', details: [ { value: 1, description: 'freq, occurrences of term within document', details: [] }, { value: 1.2000000476837158, description: 'k1, term saturation parameter', details: [] }, { value: 0.75, description: 'b, length normalization parameter', details: [] }, { value: 1, description: 'dl, length of field', details: [] }, { value: 2.868375301361084, description: 'avgdl, average length of field', details: [] } ] } ] } ] } ] } }, { title: 'The Men', score: 2.8848698139190674, scoreDetails: { value: 2.8848698139190674, description: 'FunctionScoreQuery($type:string/title:men, scored by scores) [BM25Similarity], result of:', details: [ { value: 2.8848698139190674, description: 'weight($type:string/title:men in 870) [BM25Similarity], result of:', details: [ { value: 2.8848698139190674, description: 'score(freq=1.0), computed as boost * idf * tf from:', details: [ { value: 5.5606818199157715, description: 'idf, computed as log(1 + (N - n + 0.5) / (n + 0.5)) from:', details: [ { value: 90, description: 'n, number of documents containing term', details: [] }, { value: 23529, description: 'N, total number of documents with field', details: [] } ] }, { value: 0.5187978744506836, description: 'tf, computed as freq / (freq + k1 * (1 - b + b * dl / avgdl)) from:', details: [ { value: 1, description: 'freq, occurrences of term within document', details: [] }, { value: 1.2000000476837158, description: 'k1, term saturation parameter', details: [] }, { value: 0.75, description: 'b, length normalization parameter', details: [] }, { value: 2, description: 'dl, length of field', details: [] }, { value: 2.868375301361084, description: 'avgdl, average length of field', details: [] } ] } ] } ] } ] } }, { title: 'Simple Men', score: 2.8848698139190674, scoreDetails: { value: 2.8848698139190674, description: 'FunctionScoreQuery($type:string/title:men, scored by scores) [BM25Similarity], result of:', details: [ { value: 2.8848698139190674, description: 'weight($type:string/title:men in 6371) [BM25Similarity], result of:', details: [ { value: 2.8848698139190674, description: 'score(freq=1.0), computed as boost * idf * tf from:', details: [ { value: 5.5606818199157715, description: 'idf, computed as log(1 + (N - n + 0.5) / (n + 0.5)) from:', details: [ { value: 90, description: 'n, number of documents containing term', details: [] }, { value: 23529, description: 'N, total number of documents with field', details: [] } ] }, { value: 0.5187978744506836, description: 'tf, computed as freq / (freq + k1 * (1 - b + b * dl / avgdl)) from:', details: [ { value: 1, description: 'freq, occurrences of term within document', details: [] }, { value: 1.2000000476837158, description: 'k1, term saturation parameter', details: [] }, { value: 0.75, description: 'b, length normalization parameter', details: [] }, { value: 2, description: 'dl, length of field', details: [] }, { value: 2.868375301361084, description: 'avgdl, average length of field', details: [] } ] } ] } ] } ] } }, { title: 'X-Men', score: 2.8848698139190674, scoreDetails: { value: 2.8848698139190674, description: 'FunctionScoreQuery($type:string/title:men, scored by scores) [BM25Similarity], result of:', details: [ { value: 2.8848698139190674, description: 'weight($type:string/title:men in 8368) [BM25Similarity], result of:', details: [ { value: 2.8848698139190674, description: 'score(freq=1.0), computed as boost * idf * tf from:', details: [ { value: 5.5606818199157715, description: 'idf, computed as log(1 + (N - n + 0.5) / (n + 0.5)) from:', details: [ { value: 90, description: 'n, number of documents containing term', details: [] }, { value: 23529, description: 'N, total number of documents with field', details: [] } ] }, { value: 0.5187978744506836, description: 'tf, computed as freq / (freq + k1 * (1 - b + b * dl / avgdl)) from:', details: [ { value: 1, description: 'freq, occurrences of term within document', details: [] }, { value: 1.2000000476837158, description: 'k1, term saturation parameter', details: [] }, { value: 0.75, description: 'b, length normalization parameter', details: [] }, { value: 2, description: 'dl, length of field', details: [] }, { value: 2.868375301361084, description: 'avgdl, average length of field', details: [] } ] } ] } ] } ] } }, { title: 'Mystery Men', score: 2.8848698139190674, scoreDetails: { value: 2.8848698139190674, description: 'FunctionScoreQuery($type:string/title:men, scored by scores) [BM25Similarity], result of:', details: [ { value: 2.8848698139190674, description: 'weight($type:string/title:men in 8601) [BM25Similarity], result of:', details: [ { value: 2.8848698139190674, description: 'score(freq=1.0), computed as boost * idf * tf from:', details: [ { value: 5.5606818199157715, description: 'idf, computed as log(1 + (N - n + 0.5) / (n + 0.5)) from:', details: [ { value: 90, description: 'n, number of documents containing term', details: [] }, { value: 23529, description: 'N, total number of documents with field', details: [] } ] }, { value: 0.5187978744506836, description: 'tf, computed as freq / (freq + k1 * (1 - b + b * dl / avgdl)) from:', details: [ { value: 1, description: 'freq, occurrences of term within document', details: [] }, { value: 1.2000000476837158, description: 'k1, term saturation parameter', details: [] }, { value: 0.75, description: 'b, length normalization parameter', details: [] }, { value: 2, description: 'dl, length of field', details: [] }, { value: 2.868375301361084, description: 'avgdl, average length of field', details: [] } ] } ] } ] } ] } } ]
1 db.movies.aggregate([{ 2 "$search": { 3 "text": { 4 "path": "title", 5 "query": "men", 6 "score": { 7 "function": { 8 "log": { 9 "path": { 10 "value": "imdb.rating", 11 "undefined": 10 12 } 13 } 14 } 15 } 16 }, 17 "scoreDetails": true 18 } 19 }, 20 { 21 $limit: 5 22 }, 23 { 24 $project: { 25 "_id": 0, 26 "title": 1, 27 "score": { "$meta": "searchScore" }, 28 "scoreDetails": {"$meta": "searchScoreDetails"} 29 } 30 }])
[ { title: '12 Angry Men', score: 0.9493899941444397, scoreDetails: { value: 0.9493899941444397, description: 'FunctionScoreQuery($type:string/title:men, scored by log(imdb.rating)) [BM25Similarity], result of:', details: [ { value: 0.9493899941444397, description: 'log(imdb.rating)', details: [] } ] } }, { title: 'The Men Who Built America', score: 0.9344984292984009, scoreDetails: { value: 0.9344984292984009, description: 'FunctionScoreQuery($type:string/title:men, scored by log(imdb.rating)) [BM25Similarity], result of:', details: [ { value: 0.9344984292984009, description: 'log(imdb.rating)', details: [] } ] } }, { title: 'No Country for Old Men', score: 0.9084849953651428, scoreDetails: { value: 0.9084849953651428, description: 'FunctionScoreQuery($type:string/title:men, scored by log(imdb.rating)) [BM25Similarity], result of:', details: [ { value: 0.9084849953651428, description: 'log(imdb.rating)', details: [] } ] } }, { title: 'X-Men: Days of Future Past', score: 0.9084849953651428, scoreDetails: { value: 0.9084849953651428, description: 'FunctionScoreQuery($type:string/title:men, scored by log(imdb.rating)) [BM25Similarity], result of:', details: [ { value: 0.9084849953651428, description: 'log(imdb.rating)', details: [] } ] } }, { title: 'The Best of Men', score: 0.9084849953651428, scoreDetails: { value: 0.9084849953651428, description: 'FunctionScoreQuery($type:string/title:men, scored by log(imdb.rating)) [BM25Similarity], result of:', details: [ { value: 0.9084849953651428, description: 'log(imdb.rating)', details: [] } ] } } ]