Classificar os documentos nos resultados
A cada documento retornado por uma query da Atlas 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.
Muitos fatores podem influenciar a pontuação de um documento, incluindo:
A posição do termo de pesquisa no documento,
A frequência de ocorrência do procurar no documento,
O tipo de operador que a query usa,
O tipo de analisador que a query utiliza.
Observação
Quando você faz query de valores em arrays, o Atlas Search não altera a pontuação dos resultados correspondentes com base no número de valores dentro da array que correspondeu à query. A pontuação seria igual a uma única correspondência, independentemente do número de correspondências dentro de uma array.
A pontuação atribuída a um documento retornado faz parte dos metadados do documento. Você pode incluir a pontuação de cada documento retornado com o conjunto de resultados usando um estágio $project
em seu pipeline de agregação.
Após o estágio $search
, no estágio $project
, o campo score
assume a expressão $meta, que requer o valor searchScore
. Você também pode especificar o valor searchScoreDetails
para a expressão $meta do campo scoreDetails
para obter uma análise detalhada da pontuação.
Após o estágio $vectorSearch
, no estágio $project
, o campo score
recebe a expressão $meta, que requer o valor vectorSearchScore
para retornar a pontuação de cada documento em seus resultados de 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 ])
Para saber mais, consulte modificar e normalizar a pontuação da pesquisa.
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.
Depois de um estágio $project
, você não precisa incluir um $sort
decrescente porque o Atlas Search retorna os documentos da pontuação mais alta para a mais baixa. Entretanto, se vários documentos nos resultados tiverem pontuações idênticas, a ordem dos documentos nos resultados não será determinística. Se quiser que os resultados tenham uma ordem determinada, recomendamos que você inclua a opção de classificação em seu estágio $search
para classificar os resultados por um campo exclusivo. Se você não especificar um campo exclusivo, o Atlas Search usa como padrão a classificação arbitrária dos resultados quando os resultados têm uma pontuação idêntica. Você pode usar a opção de classificação 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.
Observação
Em nós de pesquisa separados, cada nó tem sua própria cópia de um documento com uma ID interna diferente que o Lucene usa para classificar os resultados quando vários documentos têm pontuações idênticas. Se o ID interno do documento em um nó que não está processando a query tiver uma ordem de paginação maior do que o token de paginação, o mongot
no nó que está processando a consulta poderá incluí-lo nos resultados se você classificar e paginar os resultados. Para mitigar isso, use $match
após $search
para excluir o documento por _id
.
Mais informações sobre o algoritmo de pontuação Lucene podem ser encontradas na documentação do Lucene.