Defina mapeamentos de campo
Nesta página
Ao criar um índice de Atlas Search, você pode:
Especifique os campos para indexar utilizando mapeamentos estáticos.
Configure o Atlas Search para indexar automaticamente todos os tipos de campo suportados utilizando mapeamentos dinâmicos.
Para utilizar mapeamentos estáticos, você deve incluir explicitamente os campos na coleção que deseja indexar. No campo type
, especifique o tipo de dados do campo na definição do campo. Alternativamente, você pode especificar uma array de definições de campo para um campo, um para cada tipo de dados.
1 { 2 "mappings": { 3 "dynamic": <boolean>, 4 "fields": { 5 "<field-name>": [ 6 { 7 "type": "<field-type>", 8 ... 9 }, 10 ... 11 ], 12 ... 13 } 14 } 15 }
Você pode definir campos na definição do índice do Atlas Search em qualquer ordem.
Mapeamentos estáticos e dinâmicos
Você pode utilizar mapeamentos estáticos e dinâmicos para especificar se a Pesquisa Atlas deve indexar automaticamente todos os campos dinamicamente indexáveis em sua coleta.
Mapeamentos estáticos
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.
Para mapeamentos estáticos, configure mappings.dynamic
para false
e especifique os campos para indexar utilizando mappings.fields
. O Atlas Search indexa somente os campos especificados com opções específicas. Se um campo indexado contiver dados polimórficos, a Atlas Search indexará apenas os documentos que correspondem aos mapeamentos especificados na definição de índice para esse campo e ignorará os documentos que contêm valores que não são o tipo de dados especificado na definição de índice para esse campo.
Você não pode usar a notação de ponto para indexar estaticamente campos aninhados. Ao definir o índice para um campo aninhado, você deve definir os mapeamentos para cada campo pai daquele campo aninhado. Para obter um exemplo, consulte os Exemplos nesta página, que demonstram a sintaxe de índice para um campo chamado city
que está aninhado dentro de um campo chamado address
.
Mapeamentos dinâmicos
Use mapeamentos dinâmicos se seu esquema mudar regularmente ou for desconhecido, ou ao experimentar o Atlas Search. Você pode configurar um índice inteiro para utilizar mapeamentos dinâmicos ou especificar campos individuais, como campos do tipo document
, para serem mapeados dinamicamente. Antes de usar mapeamentos dinâmicos, consulte a tabela de Tipos de dados.
Para mapeamentos dinâmicos, defina mappings.dynamic
como true
. O Atlas Search indexa automaticamente os campos dos tipos suportados em cada documento. Para campos do tipo string, o Atlas Search armazena os campos em mongot
.
Observação
Os índices mapeados dinamicamente ocupam mais espaço em disco do que os índices mapeados estaticamente e podem ter menos desempenho.
Tipos de dados
O Atlas Search não suporta os seguintes tipos de dados BSON:
Decimal128
JavaScript code with scope
Tecla máxima
Min key
Expressão regular
Timestamp
A tabela a seguir enumera os tipos de dados BSON compatíveis e os tipos de campo do Atlas Search que você pode usar para indexar os tipos de dados BSON. A tabela também indica se o tipo de campo Atlas Search é incluído automaticamente em um índice Atlas Search quando você habilita mapeamentos dinâmicos e lista os operadores e coletores que você pode usar para fazer query no valor do campo.
Observação
Quando você indexa dinamicamente um campo que tem dados polimórficos, o Atlas Search indexa automaticamente o campo como todos os tipos de campo dinamicamente indexáveis que correspondem aos dados. Se o campo contiver dados de um tipo que o Atlas Search não indexa automaticamente, o Atlas Search não indexará estes dados.
Tipo de JSON | Tipo de campo do Atlas Search | Dinamicamente Indexado | operadores e coletores |
---|---|---|---|
✓ | Operadores que são compatíveis com o tipo de dados na array. | ||
Boolean | ✓ | ||
Data | ✓ | ||
Data | |||
Double | ✓ | ||
Double | |||
Double | knnVector (obsoleto) | ||
Inteiro de bits | ✓ | ||
Inteiro de bits | |||
Inteiro de 64 bits | ✓ | ||
Inteiro de 64 bits | |||
Zero | N/A | ✓ | |
Objeto | ✓ | Todos os operadores | |
Objeto | embeddedDocument (para array de objetos) | ||
ObjectId | ✓ | ||
String | ✓ | ||
String | |||
String | |||
String | |||
✓ |
Algumas limitações se aplicam. Para saber mais, consulte Como indexar os elementos de uma array.
Para o tipo string
, os operadores moreLikeThis e queryString não aceitam uma array de strings.
O Atlas Search não inclui um tipo de campo para indexar valores nulos porque o Atlas Search indexa automaticamente valores nulos para campos indexados estática e dinamicamente.
Observação
Você pode armazenar campos de todos os tipos de dados suportados no Atlas Search usando a opção storedSource
.
Limitações
Por padrão, o Atlas Search para de replicar alterações para índices maiores que 2.1 bilhões de 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.
Se você planeja indexar campos que podem exceder 2.1 bilhões de objetos, use numPartitions
ou fragmente seu cluster.
Importante
A numPartitions
opção está disponível como um recurso de visualização.
Você não pode indexar campos que contêm o sinal de dólar ($
) no início do nome do campo.
Campo de índice como vários tipos de dados
Para indexar um campo como vários tipos, defina os tipos na array de definição de campo para campo.
Exemplo
O exemplo a seguir mostra a definição de campo para indexar um campo como tipos múltiplos.
1 { 2 ... 3 "mappings": { 4 "dynamic": <boolean>, 5 "fields": { 6 "<field-name>": [ 7 { 8 "type": "<field-type>", 9 ... 10 }, 11 { 12 "type": "<field-type>", 13 ... 14 }, 15 ... 16 ], 17 ... 18 }, 19 ... 20 } 21 }
Exemplos
Exemplo de mapeamento estático
O seguinte exemplo de definição de índice utiliza mapeamentos estáticos.
O analisador de índice padrão é lucene.standard.
O analisador de pesquisa padrão é lucene.standard. Você pode alterar o analisador de pesquisa se quiser que o termo de query seja analisado de forma diferente de como ele é armazenado no índice de Atlas Search.
O índice especifica mapeamentos de campo estáticos (
dynamic
:false
), o que significa que campos que não são explicitamente mencionados não são indexados. Então, a definição do índice inclui:O campo
address
, que é do tipodocument
. Possui dois subcampos incorporados,city
estate
.O subcampo
city
usa o analisador lucene.simple por padrão para queries. Utiliza a opçãoignoreAbove
para ignorar qualquer cadeia de mais de 255 bytes de comprimento.O subcampo
state
usa o analisador lucene.english por padrão para queries.O campo
company
, que é do tipostring
. Ele usa o analisador lucene.whitespace por padrão para queries. Tem um analisadormulti
denominadomySecondaryAnalyzer
que utiliza o analisador lucene.french por padrão para queries.Para saber mais sobre analisadores do
multi
, consulte Construção de Caminho.O campo
employees
, que é uma array de strings. Ele utiliza o analisador lucene.standard por padrão para queries. Para indexar arrays, o Atlas Search exige somente o tipo de dados dos elementos de array. Você não precisa especificar que os dados estão contidos em uma matriz na definição de índice.
{ "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "mappings": { "dynamic": false, "fields": { "address": { "type": "document", "fields": { "city": { "type": "string", "analyzer": "lucene.simple", "ignoreAbove": 255 }, "state": { "type": "string", "analyzer": "lucene.english" } } }, "company": { "type": "string", "analyzer": "lucene.whitespace", "multi": { "mySecondaryAnalyzer": { "type": "string", "analyzer": "lucene.french" } } }, "employees": { "type": "string", "analyzer": "lucene.standard" } } } }
Exemplo de mapeamento combinado
O exemplo de definição de índice a seguir utiliza mapeamentos estáticos e dinâmicos.
O analisador de índice padrão é lucene.standard.
O analisador de pesquisa padrão é lucene.standard. Você pode alterar o analisador de pesquisa se quiser que o termo de query seja analisado de forma diferente de como ele é armazenado no índice de Atlas Search.
O índice especifica mapeamentos de campo estáticos (
dynamic
:false
), o que significa que campos que não são explicitamente mencionados não são indexados. Então, a definição do índice inclui:O campo
company
, que é do tipostring
. Ele usa o analisador lucene.whitespace por padrão para queries. Tem um analisadormulti
denominadomySecondaryAnalyzer
que utiliza o analisador lucene.french por padrão para queries. Para saber mais sobre analisadores domulti
, consulte Construção de Caminho.O campo
employees
, que é um conjunto de cadeias de caracteres. Ele usa o analisador lucene.standard por padrão para consultas.O campo
address
, que é do tipodocument
. Possui dois subcampos incorporados,city
estate
. Em vez de mencionar explicitamente cada campo aninhado no documento, a definição de índice permite o mapeamento dinâmico para todos os subcampos no documento. Ele usa o analisador lucene.standard por padrão para queries.
{ "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "mappings": { "dynamic": false, "fields": { "company": { "type": "string", "analyzer": "lucene.whitespace", "multi": { "mySecondaryAnalyzer": { "type": "string", "analyzer": "lucene.french" } } }, "employees": { "type": "string", "analyzer": "lucene.standard" }, "address": { "type": "document", "dynamic": true } } } }