A cada documento retornado por uma query da Atlas Search ou da Atlas Vector Search é atribuída uma pontuação com base na relevância, e os documentos incluídos em um conjunto de resultados são retornados na ordem da pontuação mais alta para a mais baixa.
Uso
Para incluir a pontuação de cada documento em seus resultados de pesquisa, use o estágio $project
no seu pipeline de agregação.
Para a fase
$search
, o camposcore
recebe a expressão $meta, que requer o valorsearchScore
. Você também pode especificar o valorsearchScoreDetails
para a expressão $meta do camposcoreDetails
para obter uma análise detalhada da pontuação.Observação
Se você implantou nós de pesquisa, considere o seguinte:
Evite classificar os resultados por
searchScore
porque eles podem ser diferentes entre os nós de pesquisa.Para calcular
searchScore
, um host considera todos os documentos que existem nele, incluindo documentos excluídos que ainda não foram removidos do índice. Como a exclusão ocorre de forma independente em cada host, isso pode causar alterações emsearchScore
dependendo de qual host a consulta é direcionada.
Para oferecer suporte à paginação ao classificar por
searchScore
em nós de pesquisa, vote a favor desta solicitação no MongoDB Feedback Engine.Para a fase
$vectorSearch
, o camposcore
aceita a expressão $meta, que requer o valorvectorSearchScore
para retornar a pontuação de cada documento nos resultados da sua pesquisa vetorial.
Exemplo
A query a seguir utiliza um estágio $project
para adicionar um campo chamado score
aos documentos retornados:
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "text": { 5 <operator-specification> 6 } 7 } 8 }, 9 { 10 "$project": { 11 "<field-to-include>": 1, 12 "<field-to-exclude>": 0, 13 "score": { "$meta": "searchScore" } 14 } 15 } 16 ])
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "text": { 5 <operator-specification> 6 }, 7 "scoreDetails": true 8 } 9 }, 10 { 11 "$project": { 12 "<field-to-include>": 1, 13 "<field-to-exclude>": 0, 14 "scoreDetails": { "$meta": "searchScoreDetails" } 15 } 16 } 17 ])
Para saber mais, consulte retornar os detalhes da pontuação de pesquisa.
1 db.movies.aggregate([ 2 { 3 "$vectorSearch": { 4 <query-syntax> 5 } 6 }, 7 { 8 "$project": { 9 "<field-to-include>": 1, 10 "<field-to-exclude>": 0, 11 "score": { "$meta": "vectorSearchScore" } 12 } 13 } 14 ])
Para saber mais, consulte Pontuação do Atlas Vector Search.
Comportamento
A pontuação atribuída a um documento retornado faz parte dos metadados do documento. Você pode usar uma fase $project
no seu pipeline de agregação para incluir a pontuação de cada documento retornado junto com o conjunto de resultados. Os documentos retornam da pontuação mais alta para a mais baixa. Muitos fatores podem influenciar a pontuação de um documento, incluindo o seguinte:
Posição do termo de pesquisa no documento.
Frequência de ocorrência do termo de pesquisa no documento.
Tipo de operador ou analisador que uma query do Atlas Search utiliza.
Para saber mais sobre o algoritmo de pontuação do Lucene, consulte a documentação do Lucene.
Opções adicionais
Além do comportamento padrão de pontuação, o Atlas Search oferece suporte às seguintes opções:
Modificar a pontuação atribuída a certos documentos.
Retornando um detalhamento detalhado da pontuação usando a opção detalhes da pontuação.
Normalizando a pontuação da pesquisa.
Considerações
Se vários documentos nos resultados tiverem pontuações idênticas, a ordem dos documentos nos resultados não será determinística. Se você quiser que os resultados do Atlas Search tenham uma ordem específica, inclua a opção sort na etapa $search
para ordenar os resultados por um campo único. Você pode usar a opção sort para também retornar uma classificação ascendente dos resultados por pontuação. Para mais informações, consulte Classificar resultados do Atlas Search e Classificar por exemplos de pontuação.
Em nós de pesquisa separados, cada nó atribui IDs internos diferentes do Lucene aos documentos, usados para ordenação quando as pontuações são idênticas. Ao classificar e paginar os resultados, o processo mongot
no nó que está processando a query pode incluir documentos de outros nós se os IDs internos tiverem uma ordem de paginação maior que a do token. Para evitar isso, use $match
após $search
para excluir documentos por seus _id
.
Ao consultar valores de array, o Atlas Search atribui a mesma pontuação, independentemente de quantos valores na array correspondam à query.
Tutorials
Para exemplos de como usar opções adicionais de | |
Para ver exemplos de como usar o campo |