Classificar os documentos nos resultados
A cada documento retornado por uma query do Atlas Search ou 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
em seu pipeline de agregação.
Para o estágio
$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ê distribuiu nós de pesquisa, considere o seguinte:
Evite classificar os resultados por
searchScore
porque ele pode ser diferente em todos os nós de pesquisa.Para calcular
searchScore
, um host leva em consideração todos os documentos existentes 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 para qual host a query é roteada.
Para oferecer suporte à paginação ao classificar por
searchScore
nos nós de pesquisa, vote nesta solicitação no MongoDB Feedback Engine.Para o estágio
$vectorSearch
, o camposcore
usa a expressão $meta, que requer o valorvectorSearchScore
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 ])
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 um $project
estágio em 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 os seguintes:
Posição do termo de pesquisa no documento.
Frequência de ocorrência do termo no documento.
Tipo de operador ou analisador que uma query do Atlas Search utiliza.
Para saber mais sobre o algoritmo de pontuação Lucene, consulte a documentação do Lucene.
Opções adicionais
Além do comportamento de pontuação padrão, o Atlas Search oferece suporte às seguintes opções:
Modificar a pontuação atribuída a determinados 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 determinada, inclua a opção de classificação em seu estágio $search
para classificar os resultados por um campo exclusivo. 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 da Atlas Search e Classificar por Exemplos de Pontuação.
Em nós de pesquisa separados, cada nó atribui documentos diferentes IDs Lucene internos usados para classificação quando as pontuações são idênticas. Ao classificar e paginar resultados, o mongot
processo no nó que está processando a query pode incluir documentos de outros nós se seus IDs internos tiverem ordem de paginação maior do que o token. Para evitar isso, use $match
após para excluir documentos $search
por _id
seu.
Ao fazer query de valores de array, o Atlas Search atribui a mesma pontuação, independentemente de quantos valores na array correspondem à query.
Tutorials
Para obter exemplos sobre como usar opções adicionais | |
Para obter exemplos de como usar o campo |