Você pode usar a opção booleana scoreDetails em seu estágio $search para obter um detalhamento detalhado da pontuação de cada documento nos resultados da query.
Quando você define scoreDetails: true em seu estágio $search, o MongoDB pesquisa retorna informações de pontuação detalhadas para cada documento correspondente. Essas informações explicam por que um documento correspondeu à query e recebeu sua pontuação de relevância nos resultados da pesquisa.
By default, scoring is based on the bm25 formula:
Frequência do termo: com que frequência um termo de pesquisa aparece no documento
Frequência inversa de documento : quão comum é o termo de pesquisa em todos os documentos
Comprimento do campo: o comprimento do campo que corresponde à query
A opção scoreDetails divide estes fatores para ajudá-lo a analisar por que um documento correspondeu à query e recebeu sua pontuação.
To view the metadata, you must use the $meta expression in the $project stage.
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- to include details of the score for the documents in the results. If set totrue, MongoDB Search returns a detailed breakdown of the score for each document in the result. This provides information on why certain documents matched a MongoDB Search query. To learn more, see Output.false- para excluir detalhes do detalhamento da pontuação dos resultados. (Padrão)
Se omitido, a opção scoreDetails será padronizada como false.
In the $project stage, the scoreDetails field takes the $meta expression, which requires the following value:
| 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 |
|---|---|---|
| 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 query. Por exemplo, o MongoDB Search usa uma função de decaimento de distância para calcular a pontuação para o operador de proximidade. |
| 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. |
| 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
Diferentes operadores de query usam algoritmos diferentes para calcular o searchScore para cada documento nos resultados. As seções a seguir descrevem como os operadores de query comuns lidam com a pontuação:
operadores text, phrase, queryString e autocomplete
Como padrão, os operadores text, phrase, queryString e autocomplete usam o algoritmo de similaridade bm25 para pontuar documentos.
Recomendamos o uso dos algoritmos stableTfl ou boolean quando você precisar de resultados consistentes em várias queries, especialmente se ambos os itens a seguir forem verdadeiros:
Seu aplicativo classifica os resultados por
searchScoree pagina os resultados, o que depende de uma pontuação determinística para evitar duplicatas ou documentos ignoradosYour deployment uses dedicated MongoDB Search nodes or has read preference set to
secondaryornearest, which increases the likelihood that initial and subsequent queries are routed to different MongoDB Search nodes
bm25 as pontuações podem não ser consistentes entre queries subsequentes. Cada nó do MongoDB Search cria índices do MongoDB Search e executa operações de atualização e exclusão de forma independente, resultando em um corpus de documentos que pode variar entre diferentes nós do MongoDB Search. Como os cálculos de bm25 dependem do corpus de documentos, queries subsequentes que são roteadas para diferentes nós do MongoDB Search podem calcular pontuações bm25 diferentes para os mesmos documentos.
Para usar um algoritmo de similaridade diferente, especifique a propriedade similarity.type na definição do índice do MongoDB Search para campos que você indexa como tipo string ou autocomplete do MongoDB Search. Para aprender a configurar um índice do MongoDB Search para esses tipos, consulte Como indexar campos de string ou Como indexar campos para preenchimento automático.
Você pode escolher entre os seguintes algoritmos de similaridade ao especificar a propriedade similarity.type na definição do índice de pesquisa do MongoDB:
bm25
bm25 é um algoritmo de classificação popular que ordena documentos com base em:
Frequência do termo: com que frequência um termo de pesquisa aparece no documento
Frequência inversa de documento : quão comum é o termo de pesquisa em todos os documentos
Comprimento do campo: o comprimento do campo que corresponde à query
bm25 calcula a pontuação como boost * idf * tf, onde cada fator é definido da seguinte maneira:
Fator | Descrição | |
|---|---|---|
| Fator especificado no momento da query usando a opção | |
| Frequência de documento inversa da query. O MongoDB Search calcula a frequência usando a seguinte fórmula: onde:
| |
| Frequência do termo. O MongoDB Search calcula a frequência usando a seguinte fórmula: onde:
|
booleano
boolean é um algoritmo de pontuação que verifica se cada termo de query está presente em um documento e conta quantos termos foram encontrados. Todos os termos correspondentes são tratados da mesma forma, sem ajuste de importância ou frequência do termo.
Para boolean, a pontuação é calculada como a soma de todos os termos de consulta presentes no documento, em que cada termo contribui com um valor de 1 para a pontuação, se estiver presente no documento.
stableTfl
stableTfl é um algoritmo de classificação personalizado do MongoDB Search que usa o comprimento dos termos para obter a raridade dos termos. Isso se baseia na lei de Zipf, que afirma que palavras mais longas aparecem com menos frequência (são mais raras).
stableTfl calcula a pontuação como boost * tr * tf, onde cada fator é definido da seguinte maneira:
Fator | Descrição | |
|---|---|---|
| Fator especificado no momento da query usando a opção | |
| Função de decaimento. O MongoDB Search calcula a função de decaimento usando a seguinte fórmula: onde:
| |
| Raridade do termo. O MongoDB Search calcula a raridade do termo usando a seguinte fórmula: onde:
| |
| Função de probabilidade baseada na lei de Zipf. O MongoDB Search calcula a probabilidade de o termo da query aparecer no documento usando a seguinte fórmula: onde:
|
operador próximo
The near operator uses a distance decay function to score documents. It measures the proximity of the MongoDB Search results to the number, date, or geographic point that you set as the origin value.
A função de decaimento da distância calcula a pontuação como pivot / (pivot + distance), onde cada fator é definido da seguinte forma:
Fator | Descrição | |
|---|---|---|
| Valor especificado como ponto de referência para tornar a pontuação igual a | |
| Distância absoluta entre onde:
|
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
To view details of the score recursively in the arrays of objects, configure the settings in mongosh by running the following:
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 .
The following example uses the text operator to query the title field in the sample_mflix.movies collection for the term autumn. The query specifies the scoreDetails option in the $search stage to retrieve a detailed breakdown of the score for each document in the results. The query uses the $limit stage to limit the results to three documents and the $project stage to do the following:
Exclua o campo
_id.Inclua somente o campo
title.Adicione o campo
scoreaos resultados para retornar a pontuação do documento e o camposcoreDetailsaos 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 MongoDB Search leva em conta os seguintes BM25Similarity fatores para calcular a pontuação:
Fator | Descrição | |
|---|---|---|
| Fator especificado no momento da query usando a opção | |
| Frequência de documento inversa da query. O MongoDB Search calcula a frequência usando a seguinte fórmula: onde:
| |
| Frequência do termo. O MongoDB Search calcula a frequência usando a seguinte fórmula: onde:
|
The following example uses the near operator to query the released field in the sample_mflix.movies collection for movies released near January 01, 2010. The query specifies the scoreDetails option in the $search stage to retrieve a detailed breakdown of the score for each document in the results. The query uses the $limit stage to limit the results to three documents and the $project stage to do the following:
Exclua o campo
_id.Inclua apenas os campos
titleereleased.Adicione o campo
scoreaos resultados para retornar a pontuação do documento e o camposcoreDetailsaos 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 pontuação de distância, o MongoDB Search leva em conta os seguintes fatores para calcular a pontuação:
Fator | Descrição | |
|---|---|---|
| Valor especificado como ponto de referência para tornar a pontuação igual a | |
| Distância absoluta entre onde:
|
O exemplo a seguir utiliza um operador composto para consultar a coleção sample_mflix.movies para filmes utilizando as seguintes cláusulas:
filterCláusula para encontrar filmes que contenham o termofriendno título.mustcláusula para encontrar filmes lançados entre os anos2000e2015.mustNotpara encontrar filmes que não estejam nos gênerosShort,Western, eBiography.
The query specifies the scoreDetails option in the $search stage to retrieve a detailed breakdown of the score for each document in the results. The query uses the $limit stage to limit the results to three documents and the $project stage to do the following:
Exclua o campo
_id.Inclua apenas os campos
title,releasedegenres.Adicione o campo
scoreaos resultados para retornar a pontuação do documento e o camposcoreDetailsaos 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 filter do operador composto, que não contribui para a pontuação do documento.
The following example uses the embeddedDocument operator to query the products.name field in the sample_training.companies collection for products that contain the term Basic preceded by any number of other characters. The query specifies inside the embeddedDocument operator that the returned score must be a sum of all the matching embedded documents. The query also specifies the scoreDetails option in the $search stage to retrieve a detailed breakdown of the score for each document in the results. The query uses the $limit stage to limit the results to three documents and the $project stage to do the following:
Exclua o campo
_id.Inclua somente o campo
products.name.Adicione o campo
scoreaos resultados para retornar a pontuação do documento e o camposcoreDetailsaos 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: [] } ] } } ]