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

Definir mapeamentos de campo para um índice de pesquisa do MongoDB

Ao criar um índice de pesquisa MongoDB, você pode especificar quais campos indexar usando os seguintes métodos:

  • Mapeamentos dinâmicos: deixe que o MongoDB Search indexe automaticamente todos os campos com base em um conjunto padrão ou configurado de tipos de campo (typeSet).

  • Mapeamentos estáticos: permitem que você especifique quais campos incluir no índice.

  • Por padrão, o MongoDB Search para de replicar alterações em índices maiores que 2,100,000,000 objetos de índice, em um conjunto de réplicas ou shard único, onde cada documento indexado ou embeddedDocument aninhado conta como um único objeto. Isso significa que seu índice pode ser consultado, mas você pode obter resultados obsoletos.

    If you plan to index fields that might exceed 2,100,000,000 objects, where an index object is a top-level document or an embedded document, use the numPartitions index option to partition your index (supported only on Search Nodes deployment) or shard your cluster.

  • Você não pode indexar campos que contêm o sinal de dólar ($) no início do nome do campo.

  • O tipo de campo de autocomplete pode criar grandes índices e levar mais tempo para criar do que outros tipos de campo. Embora você possa usar o tipo autocomplete em mapeamentos dinâmicos incluindo-o em uma definição typeSet personalizada, recomendamos usar o tipo autocomplete apenas em mapeamentos estáticos para evitar implicações não intencionais de desempenho, armazenamento e pontuação. Para aprender mais, consulte Como indexar campos para preenchimento automático e Melhorar o desempenho do índice do MongoDB Search.

The following syntax demonstrates how to enable MongoDB Search to index fields using dynamic and static mappings. To learn more about dynamic and static mappings, see Dynamic and Static Mappings.

1{
2 "mappings": {
3 "dynamic": true|false | {
4 "typeSet": "<typeset-name>"
5 },
6 "fields": {
7 "<field-name>": {
8 "type": "<field-type>",
9 ...
10 },
11 ...
12 }
13 },
14 "typeSets": [
15 {
16 "name": "<typeset-name>",
17 "types": [
18 {
19 "type": "<field-type>",
20 ...
21 },
22 ...
23 ]
24 },
25 ...
26 ]
27}

Você pode configurar a Pesquisa MongoDB com:

  • Mapeamentos dinâmicos para indexar automaticamente campos com base em um conjunto de tipos padrão ou configurado (typeSet)

  • Mapeamentos estáticos apenas para campos especificados do índice

You can also use dynamic mappings with static mappings. Static mappings override the dynamic mappings configuration. When you define a static mapping for a field, MongoDB Search indexes that field only according to the static mapping definition. The dynamic mapping no longer applies to that field.

Por exemplo, se você habilitar dynamic: true, o MongoDB Search indexa os campos de string como o tipo string por padrão. Se você adicionar um mapeamento estático autocomplete para um campo de string específico, o MongoDB Search indexará esse campo apenas como o tipo autocomplete. Ele não é indexado também como string, a menos que você inclua explicitamente string no mapeamento estático. Para indexar o campo como ambos os tipos, você deve definir ambos os tipos no array de mapeamento estático do campo.

Os mapeamentos dinâmicos do MongoDB pesquisa permitem configurar o MongoDB pesquisa para indexar automaticamente e recursivamente campos em seus dados. Os campos podem ser indexados com base no conjunto padrão de tipos ou configurando um typeSet.

Você pode habilitar ou configurar mapeamentos dinâmicos:

  • No nível raiz mappings para aplicar a todo o documento.

  • [Recomendado] Dentro de um tipo de campo document para aplicar a um objeto especificado.

  • [Recomendado] Em um tipo de campo embeddedDocuments para aplicar a uma array especificada de objetos que exigem comparações de query por elemento (semelhante a $elemMatch).

Observação

Melhores práticas

Os mapeamentos dinâmicos podem resultar na indexação de um grande número de campos exclusivos, o que ocupa mais espaço em disco e pode ser menos eficiente. Use mapeamentos dinâmicos somente se precisar indexar campos que mudam regularmente ou que são desconhecidos. Sempre use mapeamentos dinâmicos dentro de um documento, não no nível do documento pai.

Quando você utiliza mapeamentos dinâmicos para indexar seus dados:

  • O MongoDB Search também indexa dinamicamente todos os campos aninhados suportados pelo typeSet em um objeto document em seus dados.

  • Se um campo contiver dados polimórficos, o MongoDB Search indexará automaticamente o campo como todos os tipos suportados pelo typeSet usado no índice. Se um campo contiver dados de um tipo não suportado pelo typeSet, o MongoDB Search não indexará esses dados.

MongoDB Search uses the default typeSet when dynamic is set to true. In the default typeSet, MongoDB Search indexes the BSON types as MongoDB Search field types. The following table shows the BSON types that MongoDB Search automatically indexes as MongoDB Search field types when you use the default typeSet. MongoDB Search also automatically indexes the following BSON types when they are contained within arrays and objects.

BSON Type
Tipo de campo de pesquisa do MongoDB

Boolean

Data

Double, 32bits inteiros, 64bits inteiros

ObjectId

String

UUID

Zero

A seguir está a sintaxe para ativar o conjunto de tipos padrão para mapeamentos dinâmicos:

1{
2 "mappings": {
3 "dynamic": true
4 }
5}

For index examples that demonstrate indexing all fields using the default typeSet, see Dynamic Mapping Examples.

Specify the MongoDB Search field types to index dynamically by configuring a typeSet. You can configure any BSON type to be automatically indexed as any MongoDB Search field type except document, embeddedDocuments, vector, or deprecated field types.

Um typeSet tem a seguinte sintaxe:

Observação

Você não pode configurar um typeSet na IU do Atlas Visual Editor. Use a IU do Atlas JSON Editor em vez disso.

1{
2 "mappings": {
3 "dynamic": {
4 "typeSet": "<typeset-name>"
5 },
6 "fields": {
7 "<field-name>": {
8 "type": "<field-type>",
9 ...
10 },
11 ...
12 }
13 },
14 "typeSets": [
15 {
16 "name": "<typeset-name>",
17 "types": [
18 {
19 "type": "<field-type>"
20 },
21 ...
22 ]
23 },
24 ...
25 ]
26}

Antes de configurar um typeSet, considere o seguinte:

  • Você não pode definir o mesmo tipo de campo várias vezes no mesmo objeto typeSet . Você pode configurar somente uma definição typeSet para cada tipo de campo .

    Por exemplo, você não pode definir várias configurações para o tipo number na mesma definição typeSet.

  • Você pode configurar mapeamentos dinâmicos com o analisador multi .

For index examples that demonstrate using custom typeSet configuration, see Dynamic Mapping Examples.

Use mapeamentos estáticos para configurar opções de índice para campos que você não deseja indexados dinamicamente ou para configurar um único campo independentemente de outros em um índice. Quando você utiliza mapeamentos estáticos, o MongoDB Search indexa somente os campos que você especifica no mappings.fields. Você também pode usar mapeamentos estáticos para excluir campos de serem indexados.

To use static mappings to configure index options for only some fields, set mappings.dynamic to false and specify the field name, data type, and other configuration options for each field that you want to index. You can specify the fields in any order.

Se você omitir o campo mappings.dynamic, ele será padronizado como false.

1{
2 "mappings": {
3 "dynamic": true|false,
4 "fields": {
5 "<field-name>": {
6 "type": "<field-type>",
7 ...
8 },
9 ...
10 }
11 }
12}

To define the index for a nested field, you must define the mappings for each parent field of that nested field. You can't use dot notation to statically index nested fields. For examples, see the Examples or Combined Mapping Example below.

You can use static mappings to index fields as multiple types. To index a field as multiple types, define the types in the field definition array for the field. You can index any field as any supported types using static mappings. To learn more, see MongoDB Search Field Types.

O exemplo a seguir mostra a definição de campo para indexar um campo como tipos múltiplos.

1{
2 "mappings": {
3 "dynamic": true|false | {
4 "typeSet": "<type-set-name>"
5 },
6 "fields": {
7 "<field-name>": [
8 {
9 "type": "<field-type>",
10 ...
11 },
12 {
13 "type": "<field-type>",
14 ...
15 },
16 ...
17 ],
18 ...
19 }
20 }.
21 "typeSets": [
22 {
23 "name": "<typeset-name>",
24 "types": [
25 {
26 "type": "<field-type>"
27 },
28 ...
29 ]
30 },
31 ...
32 ]
33}

For other index examples that demonstrate static mappings, see Static Mapping Example.

MongoDB Search doesn't support the following BSON data types:

  • Decimal128

  • JavaScript code with scope

  • Tecla máxima

  • Min key

  • Expressão regular

  • Timestamp

MongoDB Search automatically stores fields of type string on mongot. You can store fields of all supported data types on MongoDB Search using the Define Stored Source Fields in Your MongoDB Search Index option in your index definition. To learn more about mongot and MongoDB Search node architecture, see MongoDB Search Deployment Options.

The following table enumerates the supported BSON data types and the MongoDB Search field types that you can use to index the BSON data types. The table also lists the operators and collectors that you can use to query the field values.

Esses operadores não suportam um array de strings.

A Pesquisa do MongoDB não inclui um tipo de campo para indexar valores nulos porque o MongoDB Search indexa automaticamente valores nulos para campos indexados estático e dinamicamente.

Obsoleto. Para saber mais sobre os tipos de campo de faceta obsoletos e suas contrapartes atualizadas, veja Comparando tipos de campo de faceta.

Array com valor double ou int.

Observação

You can store fields of all supported data types on MongoDB Search using the storedSource option.

The following sample index definitions on the sample_mflix.movies collection demonstrate how to index fields using dynamic and static mappings. You can load the sample data on your cluster to try the examples. To learn more about how to create MongoDB Search indexes, see MongoDB Search Quick Start.

As seguintes definições de índice de amostra demonstram como utilizar mapeamentos dinâmicos.

Habilite mapeamentos dinâmicos para indexar automaticamente os tipos de campo da string.

A seguinte definição de índice:

  • Habilita mapeamentos dinâmicos no nível raiz para indexar automaticamente os campos na coleção com base na definição typeSet denominada only_strings, que indexa campos de string na coleção com a opção de índice positions e com store definido como false. Essas opções de configuração economizam espaço em disco ao não armazenar os valores de campo ou deslocamentos de termo para realce de query.
{
"mappings": {
"dynamic": {
"typeSet": "only_strings"
}
},
"typeSets": [
{
"name": "only_strings",
"types": [
{
"type": "string",
"store": false,
"indexOptions": "positions"
}
]
}
]
}

Habilite mapeamentos dinâmicos dentro de um campo de tipo documento para indexar automaticamente campos aninhados.

A seguinte definição de índice:

  • Permite mapeamentos dinâmicos no nível raiz para indexar dinamicamente campos na coleção com base no typeSet denominado only_strings, que indexa campos de string na coleção com a opção de índice positions e com store definido como false, que economiza espaço em disco ao não armazenar os valores de campo ou compensações de termo para realce de query.

  • Indexa o campo awards como o tipo document e usa a opção dynamic com o only_numbers typeSet para indexar dinamicamente somente os subcampos numéricos no documento awards. Isso significa que os subcampos numéricos wins e nominations são indexados, mas o subcampo de string text não é indexado.

{
"mappings": {
"dynamic": {
"typeSet": "only_strings"
},
"fields": {
"awards": {
"type": "document",
"dynamic": {
"typeSet": "only_numbers"
}
}
}
},
"typeSets": [
{
"name": "only_numbers",
"types": [
{
"type": "number"
}
]
},
{
"name": "only_strings",
"types": [
{
"type": "string",
"store": false,
"indexOptions": "positions"
}
]
}
]
}

Mapeie dinamicamente tipos de campo específicos, exceto para campos especificados.

A seguinte definição de índice:

  • Configura mapeamentos dinâmicos para tipos específicos de campo usando o typeSet chamado indexedTypes, que especifica o seguinte comportamento:

    • Indexe automaticamente campos de string como o tipo token .

    • Indexe automaticamente campos numéricos como o tipo number .

  • Exclui o campo plot de ser incluído no índice.

{
"mappings": {
"dynamic": {
"typeSet": "indexedTypes"
},
"fields": {
"plot": []
}
},
"typeSets": [
{
"name": "indexedTypes",
"types": [
{
"type": "token"
},
{
"type": "number"
}
]
}
]
}

As seguintes definições de índice de amostra demonstram como utilizar mapeamentos estáticos.

Desative mapeamentos dinâmicos e defina campos individuais para indexação.

A seguinte definição de índice:

  • Especifica mapeamentos de campo estáticos no nível raiz (dynamic: false), o que significa que campos que não são especificados no mappings.fields não são indexados. A definição do índice inclui explicitamente os seguintes campos para indexação:

    • O campo awards, que é do tipo document. Possui três subcampos incorporados, wins, nominations e text.

      Os subcampos wins e nominations contêm dados numéricos e são indexados como o tipo number. nominations é indexado com a representação int64, o que lhe permite suportar valores inteiros maiores do que o tipo number padrão.

      O subcampo text contém dados de string e é indexado como o tipo string utilizando o analisador lucene.english, que é otimizado para texto em inglês. O campo text também usa a opção ignoreAbove para ignorar qualquer string de mais de 255 caracteres.

    • O campo title, que contém dados de string e é indexado como tipo string usando o analisador lucene.whitespace, otimizado para texto que contém muitos espaços em branco, como nomes ou títulos de produtos. O campo title utiliza a opção multi para especificar o analisador lucene.french como um analisador secundário. Isso permite que você especifique { "value": "title", "multi": "frenchAnalyzer" } como path em suas $search queries para direcionar melhor os termos de query em francês.

    • O campo genres , que contém uma array de strings e é indexado como o tipo string. O MongoDB Search indexa os elementos de array usando o analisador lucene.standard por padrão. Para indexação de arrays, o MongoDB Search exige apenas o tipo de dados dos elementos do array. Você não precisa especificar que os dados estão contidos em um array na definição de índice.

{
"mappings": {
"dynamic": false,
"fields": {
"awards": {
"type": "document",
"fields": {
"wins": {
"type": "number"
},
"nominations": {
"type": "number",
"representation": "int64"
},
"text": {
"type": "string",
"analyzer": "lucene.english",
"ignoreAbove": 255
}
}
},
"title": {
"type": "string",
"analyzer": "lucene.whitespace",
"multi": {
"frenchAnalyzer": {
"type": "string",
"analyzer": "lucene.french"
}
}
},
"genres": {
"type": "string"
}
}
}
}

Os seguintes exemplos de definição de índice combinam mapeamentos dinâmicos com mapeamentos estáticos.

Desative os mapeamentos dinâmicos no nível raiz, mas defina mapeamentos estáticos e habilite mapeamentos dinâmicos para campos aninhados.

Essa definição de índice:

  • Especifica mapeamentos de campo estáticos (dynamic: false), o que significa que campos e tipos de campo que não são explicitamente mencionados não são indexados. Então, a definição do índice inclui:

    • O campo title, que contém dados de string e é indexado como o tipo string usando o analisador lucene.whitespace, otimizado para texto que contém muitos espaços em branco, como nomes ou títulos de produtos.

    • O campo awards, que é do tipo document e contém três subcampos. Os subcampos wins e nominations contêm dados numéricos e o subcampo text contém dados de string. Em vez de definir explicitamente o tipo de dados para cada campo aninhado no documento, a definição de índice permite o mapeamento dinâmico para todos os subcampos no documento. Isto indexa wins e nominations como o tipo number e text como o tipo string. Os dados no campo text são indexados utilizando o analisador lucene.standard por padrão.

    {
    "mappings": {
    "dynamic": false,
    "fields": {
    "title": {
    "type": "string",
    "analyzer": "lucene.whitespace"
    },
    "awards": {
    "type": "document",
    "dynamic": true
    }
    }
    }
    }

Defina mapeamentos estáticos no nível raiz e mapeie dinamicamente um campo aninhado usando uma definição personalizada de typeSet.

Essa definição de índice:

  • Especifica mapeamentos de campo estáticos no nível raiz (dynamic: false), o que significa que os campos que não são especificados na opção mappings.fields não são indexados.

  • Define mapeamentos dinâmicos para o campo awards , que é do tipo document, utilizando o typeSet personalizado denominado movieAwards. O campo awards tem três subcampos incorporados: wins, nominations e text. Em vez de indexar automaticamente os subcampos definindo dynamic como true no nível raiz ou indexando explicitamente cada campo aninhado usando mapeamentos estáticos, a definição de índice configura mapeamentos dinâmicos para o tipo de campo document usando o typeSet definição chamada movieAwards. O movieAwards typeSet faz o seguinte:

    • Indexes campos de string como o tipo string usando a opção multi para especificar vários analisadores: lucene.english e lucene.french.

    • Indexa campos numéricos como tipo number utilizando as configurações padrão para o tipo number.

      {
      "mappings": {
      "dynamic": false,
      "fields": {
      "awards": {
      "type": "document",
      "dynamic": {
      "typeSet": "movieAwards"
      }
      }
      }
      },
      "typeSets": [
      {
      "name": "movieAwards",
      "types": [
      {
      "type": "string",
      "multi": {
      "english": {
      "type": "string",
      "analyzer": "lucene.english"
      },
      "french": {
      "type": "string",
      "analyzer": "lucene.french"
      }
      }
      },
      {
      "type": "number"
      }
      ]
      }
      ]
      }