Retorne os Detalhes da Pontuação
Nesta página
Você pode usar a opção booleana scoreDetails
em seu estágio $search
para um detalhamento detalhado da pontuação para cada documento nos resultados da query. Para visualizar os metadados, você deve utilizar a expressão $meta no estágio $project
.
Sintaxe
{ "$search": { "<operator>": { <operator-specification> }, "scoreDetails": true | false } }, { "$project": { "scoreDetails": {"$meta": "searchScoreDetails"} } }
Opções
No estágio $search, a opção booleana scoreDetails
assume um dos seguintes valores:
true
- para incluir detalhes da pontuação para os documentos nos resultados. Se definido comotrue
, o Atlas Search retorna um detalhamento detalhado da pontuação para cada documento no resultado. Para saber mais, consulte Saída.false
- para excluir detalhes do detalhamento da pontuação dos resultados. (Padrão)
Se omitido, a opção scoreDetails
será padronizada como false
.
No estágio $project, o campo scoreDetails
assume a expressão $meta, que requer o seguinte valor:
searchScoreDetails | Retorna um detalhamento detalhado da pontuação para cada documento nos resultados. |
Saída
A opção scoreDetails
retorna os seguintes campos na array details
dentro do objeto scoreDetails
para cada documento no resultado:
Campo | Tipo | Descrição |
---|---|---|
value | float | Contribuição para a pontuação de um subconjunto da fórmula de pontuação. O A fórmula de pontuação varia de acordo com o operador usado na consulta. Por exemplo, o Atlas Search usa a seguinte fórmula de pontuação para uma consulta composta com operadores de texto e de proximidade: |
description | string | Subconjunto da fórmula de pontuação, incluindo detalhes sobre como o documento foi pontuado e os fatores considerados no cálculo da pontuação. O nível superior Para saber mais, consulte Fatores que contribuem para a pontuação. |
details | Array de objetos | Detalhamento da pontuação para cada correspondência no documento com base no subconjunto da fórmula de pontuação. O valor é uma array de objetos de detalhes de pontuação, recursivos em estrutura. |
Fatores que contribuem para a pontuação
Para BM25Similarity
, a pontuação é calculada como boost * idf * tf
. O Atlas Search leva em conta os seguintes fatores BM25Similarity
para calcular a pontuação:
boost | Aumentar a importância do termo. | |
freq | Frequência do termo da query. | |
idf | Frequência de documentos inversa da query. Atlas Search calcula a frequência utilizando a seguinte fórmula:
onde:
| |
tf | Frequência do termo. Atlas Search calcula a frequência utilizando a seguinte fórmula:
onde:
|
Para a função de decaimento da distância, a pontuação é calculada como pivot / (pivot +
abs(fieldValue - origin))
. O Atlas Search leva em conta os seguintes fatores para calcular a pontuação:
origin | Valor para pesquisar próximo. Este é o ponto de origem do qual a proximidade dos resultados é medida. |
fieldValue | Valor do campo que você está consultando no documento. Quanto mais próximo o fieldValue estiver de origin , maior será a pontuação da query próxima. |
pivot | Valor especificado como ponto de referência para tornar a pontuação igual a 0.5 se a distância entre fieldValue e origin for igual a ele. Isso define a rapidez com que a pontuação diminui à medida que a distância entre fieldValue e origin aumenta. Para uma determinada distância entre fieldValue e origin , se pivot diminuir, a pontuação também diminui. |
Exemplos
Os exemplos a seguir mostram como recuperar os detalhes das pontuações nos resultados para o seguinte:
A query é executada usando operadores text, near, composto e embeddedDocument .
Query com pontuações modificadas usando expressão de opção
function
.
Dica
Para visualizar detalhes da pontuação recursivamente nas matrizes de objetos, configure as configurações em mongosh
executando o seguinte:
config.set('inspectDepth', Infinity)
Exemplos de operador
Os exemplos a seguir demonstram como recuperar um detalhamento da pontuação usando a opção $search
scoreDetails
para o documento nos resultados da query dos operadores text, near, composta e embeddedDocument .
O exemplo a seguir usa o operador text para fazer uma query no campo title
na coleção sample_mflix.movies
para o termo autumn
. A query especifica a opção scoreDetails
no estágio $search
para obter um detalhamento da pontuação de cada documento presente nos resultados. A query usa o estágio $limit
para limitar os resultados a três documentos, e o estágio $project
para fazer o seguinte:
Exclua o campo
_id
.Inclua somente o campo
title
.Adicione o campo
score
aos resultados para retornar a pontuação do documento e o camposcoreDetails
aos resultados para retornar um detalhamento detalhado da pontuação do documento.
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "path": "title", 6 "query": "autumn" 7 }, 8 "scoreDetails": true 9 } 10 }, 11 { 12 "$limit": 3 13 }, 14 { 15 "$project": { 16 "_id": 0, 17 "title": 1, 18 "score": { "$meta": "searchScore" }, 19 "scoreDetails": { "$meta": "searchScoreDetails" } 20 } 21 } 22 ])
1 [ 2 { 3 title: 'Autumn Leaves', 4 score: 3.834893226623535, 5 scoreDetails: { 6 value: 3.834893226623535, 7 description: '$type:string/title:autumn [BM25Similarity], result of:', 8 details: [ 9 { 10 value: 3.834893226623535, 11 description: 'score(freq=1.0), computed as boost * idf * tf from:', 12 details: [ 13 { 14 value: 7.39188289642334, 15 description: 'idf, computed as log(1 + (N - n + 0.5) / (n + 0.5)) from:', 16 details: [ 17 { 18 value: 14, 19 description: 'n, number of documents containing term', 20 details: [] 21 }, 22 { 23 value: 23529, 24 description: 'N, total number of documents with field', 25 details: [] 26 } 27 ] 28 }, 29 { 30 value: 0.5187978744506836, 31 description: 'tf, computed as freq / (freq + k1 * (1 - b + b * dl / avgdl)) from:', 32 details: [ 33 { 34 value: 1, 35 description: 'freq, occurrences of term within document', 36 details: [] 37 }, 38 { 39 value: 1.2000000476837158, 40 description: 'k1, term saturation parameter', 41 details: [] 42 }, 43 { 44 value: 0.75, 45 description: 'b, length normalization parameter', 46 details: [] 47 }, 48 { 49 value: 2, 50 description: 'dl, length of field', 51 details: [] 52 }, 53 { 54 value: 2.868375301361084, 55 description: 'avgdl, average length of field', 56 details: [] 57 } 58 ] 59 } 60 ] 61 } 62 ] 63 } 64 }, 65 { 66 title: 'Late Autumn', 67 score: 3.834893226623535, 68 scoreDetails: { 69 value: 3.834893226623535, 70 description: '$type:string/title:autumn [BM25Similarity], result of:', 71 details: [ 72 { 73 value: 3.834893226623535, 74 description: 'score(freq=1.0), computed as boost * idf * tf from:', 75 details: [ 76 { 77 value: 7.39188289642334, 78 description: 'idf, computed as log(1 + (N - n + 0.5) / (n + 0.5)) from:', 79 details: [ 80 { 81 value: 14, 82 description: 'n, number of documents containing term', 83 details: [] 84 }, 85 { 86 value: 23529, 87 description: 'N, total number of documents with field', 88 details: [] 89 } 90 ] 91 }, 92 { 93 value: 0.5187978744506836, 94 description: 'tf, computed as freq / (freq + k1 * (1 - b + b * dl / avgdl)) from:', 95 details: [ 96 { 97 value: 1, 98 description: 'freq, occurrences of term within document', 99 details: [] 100 }, 101 { 102 value: 1.2000000476837158, 103 description: 'k1, term saturation parameter', 104 details: [] 105 }, 106 { 107 value: 0.75, 108 description: 'b, length normalization parameter', 109 details: [] 110 }, 111 { 112 value: 2, 113 description: 'dl, length of field', 114 details: [] 115 }, 116 { 117 value: 2.868375301361084, 118 description: 'avgdl, average length of field', 119 details: [] 120 } 121 ] 122 } 123 ] 124 } 125 ] 126 } 127 }, 128 { 129 title: 'Cheyenne Autumn', 130 score: 3.834893226623535, 131 scoreDetails: { 132 value: 3.834893226623535, 133 description: '$type:string/title:autumn [BM25Similarity], result of:', 134 details: [ 135 { 136 value: 3.834893226623535, 137 description: 'score(freq=1.0), computed as boost * idf * tf from:', 138 details: [ 139 { 140 value: 7.39188289642334, 141 description: 'idf, computed as log(1 + (N - n + 0.5) / (n + 0.5)) from:', 142 details: [ 143 { 144 value: 14, 145 description: 'n, number of documents containing term', 146 details: [] 147 }, 148 { 149 value: 23529, 150 description: 'N, total number of documents with field', 151 details: [] 152 } 153 ] 154 }, 155 { 156 value: 0.5187978744506836, 157 description: 'tf, computed as freq / (freq + k1 * (1 - b + b * dl / avgdl)) from:', 158 details: [ 159 { 160 value: 1, 161 description: 'freq, occurrences of term within document', 162 details: [] 163 }, 164 { 165 value: 1.2000000476837158, 166 description: 'k1, term saturation parameter', 167 details: [] 168 }, 169 { 170 value: 0.75, 171 description: 'b, length normalization parameter', 172 details: [] 173 }, 174 { 175 value: 2, 176 description: 'dl, length of field', 177 details: [] 178 }, 179 { 180 value: 2.868375301361084, 181 description: 'avgdl, average length of field', 182 details: [] 183 } 184 ] 185 } 186 ] 187 } 188 ] 189 } 190 } 191 ]
O Atlas Search leva em conta os seguintes fatores BM25Similarity
para calcular a pontuação:
boost | Aumentar a importância do termo. | |
freq | Frequência do termo da query. | |
idf | Frequência de documentos inversa da query. Atlas Search calcula a frequência utilizando a seguinte fórmula:
onde:
| |
tf | Frequência do termo. Atlas Search calcula a frequência utilizando a seguinte fórmula:
onde:
|
O exemplo a seguir usa o operador near para fazer query no campo released
na coleção sample_mflix.movies
para filmes lançados perto de 01 de janeiro 2010. A query especifica a opção scoreDetails
no estágio $search
para obter um detalhamento da pontuação para cada documento nos resultados. A query usa o estágio $limit
para limitar os resultados a três documentos e o estágio $project
para fazer o seguinte:
Exclua o campo
_id
.Inclua apenas os campos
title
ereleased
.Adicione o campo
score
aos resultados para retornar a pontuação do documento e o camposcoreDetails
aos resultados para retornar um detalhamento detalhado da pontuação do documento.
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "near": { 5 "path": "released", 6 "origin": ISODate("2010-01-01T00:00:00.000+00:00"), 7 "pivot": 7776000000 8 }, 9 "scoreDetails": true 10 } 11 }, 12 { 13 "$limit": 3 14 }, 15 { 16 "$project": { 17 "_id": 0, 18 "title": 1, 19 "released": 1, 20 "score": { "$meta": "searchScore" }, 21 "scoreDetails": { "$meta": "searchScoreDetails" } 22 } 23 } 24 ])
1 [ 2 { 3 title: 'Tony', 4 released: ISODate("2010-01-01T00:00:00.000Z"), 5 score: 1, 6 scoreDetails: { 7 value: 1, 8 description: 'Distance score, computed as weight * pivotDistance / (pivotDistance + abs(value - origin)) from:', 9 details: [ 10 { value: 1, description: 'weight', details: [] }, 11 { 12 value: 7776000000, 13 description: 'pivotDistance', 14 details: [] 15 }, 16 { value: 1262303969280, description: 'origin', details: [] }, 17 { 18 value: 1262303969280, 19 description: 'current value', 20 details: [] 21 } 22 ] 23 } 24 }, 25 { 26 title: 'And Everything Is Going Fine', 27 released: ISODate("2010-01-01T00:00:00.000Z"), 28 score: 1, 29 scoreDetails: { 30 value: 1, 31 description: 'Distance score, computed as weight * pivotDistance / (pivotDistance + abs(value - origin)) from:', 32 details: [ 33 { value: 1, description: 'weight', details: [] }, 34 { 35 value: 7776000000, 36 description: 'pivotDistance', 37 details: [] 38 }, 39 { value: 1262303969280, description: 'origin', details: [] }, 40 { 41 value: 1262303969280, 42 description: 'current value', 43 details: [] 44 } 45 ] 46 } 47 }, 48 { 49 title: 'A Film with Me in It', 50 released: ISODate("2010-01-01T00:00:00.000Z") 51 score: 1, 52 scoreDetails: { 53 value: 1, 54 description: 'Distance score, computed as weight * pivotDistance / (pivotDistance + abs(value - origin)) from:', 55 details: [ 56 { value: 1, description: 'weight', details: [] }, 57 { 58 value: 7776000000, 59 description: 'pivotDistance', 60 details: [] 61 }, 62 { value: 1262303969280, description: 'origin', details: [] }, 63 { 64 value: 1262303969280, 65 description: 'current value', 66 details: [] 67 } 68 ] 69 } 70 } 71 ]
Para a pontuação de distância, o Atlas Search leva em conta os seguintes fatores para calcular a pontuação:
origin | Valor para pesquisar próximo. Este é o ponto de origem do qual a proximidade dos resultados é medida. |
fieldValue | Valor do campo que você está consultando no documento. Quanto mais próximo o fieldValue estiver de origin , maior será a pontuação da query próxima. |
pivot | Valor especificado como ponto de referência para tornar a pontuação igual a 0.5 se a distância entre fieldValue e origin for igual a ele. Isso define a rapidez com que a pontuação diminui à medida que a distância entre fieldValue e origin aumenta. Para uma determinada distância entre fieldValue e origin , se pivot diminuir, a pontuação também diminui. |
O exemplo a seguir utiliza um operador composto para consultar a coleção sample_mflix.movies
para filmes utilizando as seguintes cláusulas:
filter
Cláusula para encontrar filmes que contenham o termofriend
no título.must
cláusula para encontrar filmes lançados entre os anos2000
e2015
.mustNot
para encontrar filmes que não estejam nos gênerosShort
,Western
, eBiography
.
A consulta especifica a opção scoreDetails
no estágio $search
para recuperar uma análise detalhada da pontuação de cada documento nos resultados. A consulta usa o estágio $limit
para limitar os resultados a três documentos e o estágio $project
para fazer o seguinte:
Exclua o campo
_id
.Inclua apenas os campos
title
,released
egenres
.Adicione o campo
score
aos resultados para retornar a pontuação do documento e o camposcoreDetails
aos resultados para retornar um detalhamento detalhado da pontuação do documento.
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "compound": { 5 "filter": [{ 6 "text": { 7 "query": "friend", 8 "path": "title" 9 } 10 }], 11 "must": [{ 12 "range": { 13 "path": "year", 14 "gte": 2000, 15 "lte": 2015 16 } 17 }], 18 "mustNot": [{ 19 "text": { 20 "query": ["Short, Western", "Biography"], 21 "path": "genres" 22 } 23 }] 24 }, 25 "scoreDetails": true 26 } 27 }, 28 { 29 "$limit": 3 30 }, 31 { 32 "$project": { 33 "_id": 0, 34 "title": 1, 35 "released": 1, 36 "genres": 1, 37 "score": { "$meta": "searchScore" }, 38 "scoreDetails": { "$meta": "searchScoreDetails" } 39 } 40 } 41 ])
1 [ 2 { 3 genres: [ 'Comedy', 'Drama', 'Mystery' ], 4 title: 'With a Friend Like Harry...', 5 released: ISODate("2001-06-15T00:00:00.000Z"), 6 score: 1, 7 scoreDetails: { 8 value: 1, 9 description: 'sum of:', 10 details: [ 11 { 12 value: 0, 13 description: 'match on required clause, product of:', 14 details: [ 15 { value: 0, description: '# clause', details: [] }, 16 { 17 value: 1, 18 description: '$type:string/title:friend', 19 details: [] 20 } 21 ] 22 }, 23 { 24 value: 1, 25 description: 'sum of:', 26 details: [ 27 { 28 value: 1, 29 description: 'sum of:', 30 details: [ 31 { 32 value: 1, 33 description: '$type:double/year:[4656510908468559872 TO 4656576879166226432]', 34 details: [] 35 } 36 ] 37 } 38 ] 39 } 40 ] 41 } 42 }, 43 { 44 genres: [ 'Drama' ], 45 title: 'My Friend Henry', 46 released: ISODate("2004-08-20T00:00:00.000Z"), 47 score: 1, 48 scoreDetails: { 49 value: 1, 50 description: 'sum of:', 51 details: [ 52 { 53 value: 0, 54 description: 'match on required clause, product of:', 55 details: [ 56 { value: 0, description: '# clause', details: [] }, 57 { 58 value: 1, 59 description: '$type:string/title:friend', 60 details: [] 61 } 62 ] 63 }, 64 { 65 value: 1, 66 description: 'sum of:', 67 details: [ 68 { 69 value: 1, 70 description: 'sum of:', 71 details: [ 72 { 73 value: 1, 74 description: '$type:double/year:[4656510908468559872 TO 4656576879166226432]', 75 details: [] 76 } 77 ] 78 } 79 ] 80 } 81 ] 82 } 83 }, 84 { 85 genres: [ 'Comedy', 'Drama' ], 86 title: 'A Friend of Mine', 87 released: ISODate("2006-10-26T00:00:00.000Z"), 88 score: 1, 89 scoreDetails: { 90 value: 1, 91 description: 'sum of:', 92 details: [ 93 { 94 value: 0, 95 description: 'match on required clause, product of:', 96 details: [ 97 { value: 0, description: '# clause', details: [] }, 98 { 99 value: 1, 100 description: '$type:string/title:friend', 101 details: [] 102 } 103 ] 104 }, 105 { 106 value: 1, 107 description: 'sum of:', 108 details: [ 109 { 110 value: 1, 111 description: 'sum of:', 112 details: [ 113 { 114 value: 1, 115 description: '$type:double/year:[4656510908468559872 TO 4656576879166226432]', 116 details: [] 117 } 118 ] 119 } 120 ] 121 } 122 ] 123 } 124 } 125 ]
Observação
A # clause
nos resultados nas linhas 15, 56 e 97 representa a cláusula de query composta filter
, que não contribui para a pontuação do documento.
O exemplo a seguir usa o operador embeddedDocument para consultar o campo products.name
na coleção sample_training.companies
para produtos que contêm o termo Basic
precedido por qualquer número de outros caracteres. A query especifica dentro do operador embeddedDocument
que a pontuação retornada deve ser uma soma de todos os documentos incorporados correspondentes. A query também especifica a opção scoreDetails
no estágio $search
para recuperar uma análise detalhada da pontuação de cada documento nos resultados. A query usa o estágio $limit
para limitar os resultados a três documentos e o estágio $project
para fazer o seguinte:
Exclua o campo
_id
.Inclua somente o campo
products.name
.Adicione o campo
score
aos resultados para retornar a pontuação do documento e o camposcoreDetails
aos resultados para retornar um detalhamento detalhado da pontuação do documento.
1 db.companies.aggregate({ 2 "$search": { 3 "embeddedDocument": { 4 "path": "products", 5 "operator": { 6 "wildcard": { 7 "path": "products.name", 8 "query": "*Basic", 9 "allowAnalyzedField": true 10 } 11 }, 12 "score": { 13 "embedded": { 14 "aggregate": "sum" 15 } 16 } 17 }, 18 "scoreDetails": true 19 } 20 }, 21 { 22 "$limit": 3 23 }, 24 { 25 "$project": { 26 "_id": 0, 27 "name": 1, 28 "products.name": 1, 29 "score": { "$meta": "searchScore" }, 30 "scoreDetails": { "$meta": "searchScoreDetails" } 31 } 32 })
1 [ 2 { 3 name: 'Plaxo', 4 products: [ 5 { name: 'Plaxo Basic' }, 6 { name: 'Plaxo Pulse' }, 7 { name: 'Plaxo Personal Assistant' } 8 ], 9 score: 1, 10 scoreDetails: { 11 value: 1, 12 description: 'Score based on 1 child docs in range from 27 to 29, best match:', 13 details: [ 14 { 15 value: 1, 16 description: '$embedded:8/products/$type:string/products.name:*Basic', 17 details: [] 18 } 19 ] 20 } 21 }, 22 { 23 name: 'The Game Creators', 24 products: [ 25 { name: 'Dark Basic Professional' }, 26 { name: 'FPS Creator' }, 27 { name: 'FPS Creator X10' } 28 ], 29 score: 1, 30 scoreDetails: { 31 value: 1, 32 description: 'Score based on 1 child docs in range from 7474 to 7476, best match:', 33 details: [ 34 { 35 value: 1, 36 description: '$embedded:8/products/$type:string/products.name:*basic', 37 details: [] 38 } 39 ] 40 } 41 }, 42 { 43 name: 'Load Impact', 44 products: [ 45 { name: 'Load Impact LIGHT' }, 46 { name: 'Load Impact BASIC' }, 47 { name: 'Load Impact PROFESSIONAL' }, 48 { name: 'Load Impact ADVANCED' } 49 ], 50 score: 1, 51 scoreDetails: { 52 value: 1, 53 description: 'Score based on 1 child docs in range from 11545 to 11548, best match:', 54 details: [ 55 { 56 value: 1, 57 description: '$embedded:8/products/$type:string/products.name:*basic', 58 details: [] 59 } 60 ] 61 } 62 } 63 ]
Observação
Para pontuações baseadas em documentos infantis na faixa, os números na faixa representam os IDs dos documentos de pais e filhos indexados pelo Lucene nos bastidores. Os description
nos documentos secundários (na linhas 16, 36, e 57) mostram uma representação interna de um caminho.
Exemplos de pontuação personalizada
Os exemplos a seguir demonstram como recuperar um detalhamento da pontuação usando a opção $search
scoreDetails
para o documento nos resultados da query de exemplo de expressão em relação à collection 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: [] } ] } } ]