Menu Docs
Página inicial do Docs
/
MongoDB Atlas
/ / /

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:

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

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

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

Voltar

3. Construir um caminho de consulta