Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Índice classificado

O MongoDB Search permite que você configure a classificação em seu índice para pré-classificar documentos em ordem crescente ou decrescente no momento do índice, em vez de classificar no momento da query. Isso é útil quando os conjuntos de resultados são muito grandes, tornando a classificação no momento da query lenta. Você pode usar a opção de índice sort com os seguintes tipos de campo do MongoDB Search:

  • boolean

  • date

  • number (valores inteiros, float e double)

  • objectId

  • token

  • uuid

Você também pode configurar como deseja que null ou os valores ausentes sejam classificados usando a opção noData.

A opção sort tem a seguinte sintaxe:

1{
2 "mappings": {
3 "dynamic": true|false,
4 "fields": {
5 "<field-name>": {
6 "type": "boolean" | "date" | "number" | "objectId" | "token" | "uuid"
7 }
8 }
9 },
10 "sort": { "<field-to-sort>": 1 | -1 } | { "<field-to-sort>": { "order": 1 | -1, "noData": "lowest" | "highest" } }
11}

Para usar um índice classificado, você deve:

  • Configure os campos usados para sort usando mapeamentos estáticos.

    • boolean

    • date

    • number (valores inteiros, float e double)

    • objectId

    • token (string values)

    • uuid

    O MongoDB Search suporta campos que você indexa como vários tipos para sort se pelo menos um dos tipos for um dos tipos suportados listados acima.

  • Para classificar em campos aninhados, configure todos os campos intermediários até o campo raiz como o tipo document.

Observação

Se você especificar a opção sort com campos que são indexados usando mapeamentos dinâmicos ou typeSet, a construção do índice falhará.

Um índice classificado ordena fisicamente os documentos do MongoDB Search durante as construções de índice usando a classificação de nível superior configurada em vez de classificar no momento da query. Isso melhora o desempenho de queries cuja especificação $search.sort corresponde à classificação do índice ou a um prefixo dela, especialmente ao classificar conjuntos de resultados muito grandes (como mais de um milhão de documentos nos resultados).

Use a saída explain para verificar se uma query usa a ordenação indexada. As query que se beneficiam da ordenação indexada incluem o campo usesIndexSort: true. Uma query se beneficia quando seus campos de ordenação correspondem à ordenação indexada ou a um prefixo da ordenação indexada.

Observação

Você não pode usar a metaexpressão searchScore como parte do índice classificado porque a pontuação é calculada apenas no momento da query.

Você pode classificar em campos de array. O MongoDB Search nivela o array e usa um valor representativo para comparação. Para classificação crescente, ele usa o menor valor no array e para classificação decrescente, ele usa o maior valor no array.

Para arrays de tipos mistos, a ordem de classificação é baseada na ordem de comparação BSON do MongoDB. Para uma classificação ascendente, o MongoDB Search usa o elemento com o menor tipo de BSON. Para uma classificação decrescente, o MongoDB Search usa o elemento com o tipo de BSON mais alto.

Você pode classificar em campos filho somente se todos os documentos pai estiverem definidos estaticamente como o tipo document .

As query que usam returnScope não se beneficiam do índice classificado porque a definição do índice classificado não oferece suporte ao tipo de campo embeddedDocuments no índice para classificação.

  • Índices com especificações sort podem ter construções de índice e replicação mais lentas.

  • Queries com $search.sort especificado como o inverso da ordenação indexada podem ser mais lentas em comparação com o uso de um índice não ordenado. Queries usando outras especificações $search.sort não serão afetadas.

  • O MongoDB Search suporta apenas uma especificação sort por índice. Se você quiser classificar em campos diferentes, escolha a ordem de classificação dominante como a classificação do índice.

Os exemplos a seguir criam um índice classificado nos campos da coleção sample_airbnb.listingsAndReviews.

A definição de índice a seguir classifica o number_of_reviews e o last_reviewed campos em ordem decrescente.

{
"mappings": {
"dynamic": false,
"fields": {
"number_of_reviews": {
"type": "number"
},
"last_reviewed": {
"type": "date"
}
}
},
"sort": { "number_of_reviews": -1, "last_reviewed": -1 }
}

A definição de índice a seguir classifica os campos number_of_reviews e last_reviewed em ordem decrescente. Ele coloca documentos com valores nulos ou ausentes na parte inferior dos resultados.

{
"mappings": {
"dynamic": false,
"fields": {
"number_of_reviews": {
"type": "number"
},
"last_reviewed": {
"type": "date"
}
}
},
"sort": {
"number_of_reviews": { "order": -1, "noData": "lowest" },
"last_reviewed": { "order": -1, "noData": "lowest" }
}
}

A seguinte definição de índice classifica no campo date em ordem decrescente. Para classificar no campo date, ele define o campo reviews como o tipo embeddedDocuments e o tipo document.

{
"mappings": {
"dynamic": false,
"fields": {
"reviews": [
{
"type": "embeddedDocuments",
"dynamic": true
},
{
"type": "document",
"dynamic": false,
"fields": {
"date": {
"type": "date"
}
}
}
]
}
},
"sort": { "reviews.date": -1 }
}

A definição de índice a seguir classifica o campo property_type em ordem crescente com valores nulos e ausentes aparecendo na parte inferior dos resultados. O campo property_type é definido como os tipos string, autocomplete e token. O índice usa apenas o tipo token para classificação.

{
"mappings": {
"dynamic": false,
"fields": {
"property_type": [
{
"type": "string"
},
{
"type": "autocomplete",
"tokenization": "edgeGram",
"minGrams": 2,
"maxGrams": 15
},
{
"type": "token"
}
]
}
},
"sort": { "property_type": { "order": 1, "noData": "highest" } }
}