Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Retorne os Detalhes da Pontuação

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.

{
"$search": {
"<operator>": {
<operator-specification>
},
"scoreDetails": true | false
}
},
{
"$project": {
"scoreDetails": {"$meta": "searchScoreDetails"}
}
}

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 to true, 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:

searchScoreDetails

Retorna um detalhamento detalhado da pontuação para cada documento nos resultados.

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 value de nível superior mostra a pontuação inteira do documento de resultado , e é igual ao valor de $searchScore.

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.

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 description mostra toda a fórmula de pontuação usada para pontuar o documento.

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.

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:

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 searchScore e pagina os resultados, o que depende de uma pontuação determinística para evitar duplicatas ou documentos ignorados

  • Your deployment uses dedicated MongoDB Search nodes or has read preference set to secondary or nearest, 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 é 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

boost

Fator especificado no momento da query usando a opção score.boost do operador de query query. Você pode definir boost para um número positivo ou o valor de um campo numérico nos documentos. Para saber mais, consulte boost.

idf

Frequência de documento inversa da query. O MongoDB Search calcula a frequência usando a seguinte fórmula:

idf = log(1 + (N - n + 0.5) / (n + 0.5))

onde:

  • N é o número total de documentos com o campo da query.

  • n é o número de documentos que contêm o termo da query.

tf

Frequência do termo. O MongoDB Search calcula a frequência usando a seguinte fórmula:

tf = freq / (freq + k1 * (1 - b + b * dl / avgdl))

onde:

  • freq é o número de ocorrências do termo no documento.

  • k1 é o parâmetro de saturação do termo especificado internamente. Afeta o quanto a pontuação aumenta com cada recorrência do termo.

  • b é o parâmetro de normalização do comprimento especificado internamente. b é multiplicado pela proporção de dl para avgdl. Se b aumentar, os efeitos da proporção de dl para avgdl são amplificados.

  • dl é o comprimento do campo no documento.

  • avgdl é o comprimento médio do campo em todos os documentos.

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 é 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

boost

Fator especificado no momento da query usando a opção score.boost do operador de query query. Você pode definir boost para um número positivo ou o valor de um campo numérico nos documentos. Para saber mais, consulte boost.

tf

Função de decaimento. O MongoDB Search calcula a função de decaimento usando a seguinte fórmula:

tf = freq / (freq + k1)

onde:

  • freq é a frequência do termo de query em um documento.

  • k1 é o parâmetro de saturação do termo especificado internamente. Afeta o quanto a pontuação aumenta com cada recorrência do termo.

tr

Raridade do termo. O MongoDB Search calcula a raridade do termo usando a seguinte fórmula:

tr = log(1 + (1 - p + 0.05)/(p + 0.05))

onde:

  • p é a probabilidade de o termo da query aparecer no documento com base no comprimento do termo. Isso é baseado na lei de Zipf, que afirma que palavras mais longas aparecem com menos frequência. Para determinar a raridade do termo, o MongoDB usa uma função de decaimento baseada no comprimento do termo.

p

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:

p = 1 - (1 - m * 2 ^ (-c * tl)) ^ dl

onde:

  • m é a constante multiplicativa especificada internamente para a probabilidade do termo.

  • c é a constante de decaimento especificada internamente. Ele controla a rapidez com que p diminui à medida que a duração do termo aumenta.

  • tl é o comprimento do termo de query, medido em pontos de código unicode.

  • dl é o comprimento do documento d, medido em tokens.

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

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.

distance

Distância absoluta entre fieldValue e origin. O MongoDB Search calcula esse valor usando a seguinte fórmula:

abs(fieldValue - origin)

onde:

  • fieldValue é o valor do campo que você está consultando no documento.

  • origin é o número, data ou ponto geográfico para pesquisar próximo.

Os exemplos a seguir mostram como recuperar os detalhes das pontuações nos resultados para o seguinte:

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)

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 score aos resultados para retornar a pontuação do documento e o campo scoreDetails aos resultados para retornar um detalhamento detalhado da pontuação do documento.

1db.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

boost

Fator especificado no momento da query usando a opção score.boost do operador de query query. Você pode definir boost para um número positivo ou o valor de um campo numérico nos documentos. Para saber mais, consulte boost.

idf

Frequência de documento inversa da query. O MongoDB Search calcula a frequência usando a seguinte fórmula:

idf = log(1 + (N - n + 0.5) / (n + 0.5))

onde:

  • N é o número total de documentos com o campo da query.

  • n é o número de documentos que contêm o termo da query.

tf

Frequência do termo. O MongoDB Search calcula a frequência usando a seguinte fórmula:

tf = freq / (freq + k1 * (1 - b + b * dl / avgdl))

onde:

  • freq é o número de ocorrências do termo no documento.

  • k1 é o parâmetro de saturação do termo especificado internamente. Afeta o quanto a pontuação aumenta com cada recorrência do termo.

  • b é o parâmetro de normalização do comprimento especificado internamente. b é multiplicado pela proporção de dl para avgdl. Se b aumentar, os efeitos da proporção de dl para avgdl são amplificados.

  • dl é o comprimento do campo no documento.

  • avgdl é o comprimento médio do campo em todos os documentos.

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 .

1db.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: []
}
]
}
}
]