Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/
Atlas
/ / / /

Classificar os documentos nos resultados

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.

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 campo score recebe 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.

    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 em searchScore 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 campo score aceita a expressão $meta, que requer o valor vectorSearchScore 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:

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])
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.

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.

Além do comportamento padrão de pontuação, o Atlas Search oferece suporte às seguintes opçõ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.

Para exemplos de como usar opções adicionais de score em suas queries do Atlas Search, consulte as seguintes páginas:

Para ver exemplos de como usar o campo score em algumas queries comuns do Atlas Search, consulte as seguintes páginas:

Voltar

opções de pesquisa

Nesta página