Ao criar um índice do MongoDB Search, você pode especificar os campos para indexar usando os seguintes métodos:
Mapeamentos dinâmicos: Permite que o MongoDB Search indexe automaticamente todos os campos de tipos suportados.
Mapeamentos estáticos: permite especificar quais campos indexar.
Limitações de tipos de dados
Se você criar um índice do MongoDB Search que tenha ou tenha em breve mais de 2.1 bilhões de objetos de índice, deverá usar
numPartitions
ou shard do cluster. Para esse limite, cada documento de nível superior ouembeddedDocument
aninhado nos campos de coleção indexados conta como um objetoPor padrão, o MongoDB Search para de replicar alterações para um único índice que cresce mais de 2.1 bilhões de objetos de índice em qualquer membro ou shard do conjunto de réplicas. Isso significa que seu índice permanece consultável, mas você pode obter resultados obsoletos.
Se você planeja indexar campos que podem exceder 2.1 bilhões de objetos, onde um objeto de índice é um documento de nível superior ou um documento incorporado, use a opção de índice numPartitions para dividir seu índice (suportado somente em sistemas de Nós de Pesquisa) ou fragmentar seu cluster.
Você não pode indexar campos que contêm o sinal de dólar (
$
) no início do nome do campo.
Sintaxe
Para utilizar mapeamentos dinâmicos, configure mappings.dynamic
como true
na definição do seu índice. Você também pode configurar campos individuais especificando o nome do campo, o tipo de dados e outras opções de configuração para cada campo que deseja configurar em mappings.fields
. Você pode especificar os campos em qualquer ordem.
1 { 2 "mappings": { 3 "dynamic": true, 4 "fields": { // Optional, use this to configure individual fields 5 "<field-name>": { 6 "type": "<field-type>", 7 ... 8 }, 9 ... 10 } 11 } 12 }
Para usar mapeamentos estáticos, defina mappings.dynamic
como false
e especifique o nome do campo, tipo de dados e outras opções de configuração para cada campo que você deseja indexar em mappings.fields
. Você pode especificar os campos em qualquer ordem.
Se você omitir o campo mappings.dynamic
, ele será padronizado como false
.
1 { 2 "mappings": { 3 "dynamic": false, // Optional, if omitted defaults to "false" 4 "fields": { 5 "<field-name>": { 6 "type": "<field-type>", 7 ... 8 }, 9 ... 10 } 11 } 12 }
É possível indexar um campo com dados polimórficos como vários tipos, especificando uma array de definições de campo para o campo, uma 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 "type": "<field-type>", 12 ... 13 }, 14 ... 15 ], 16 ... 17 }, 18 ... 19 } 20 }
Mapeamentos estáticos e dinâmicos
Você pode usar mapeamentos estáticos e dinâmicos para especificar se o MongoDB Search deve indexar automaticamente todos os campos dinamicamente indexáveis em sua collection.
Mapeamentos dinâmicos
Use o mapeamento dinâmico para indexar automaticamente todos os campos dos tipos suportados em sua collection. Recomendamos usar mapeamentos dinâmicos somente se seu esquema mudar regularmente ou for desconhecido, ou se você estiver experimentando o MongoDB Search. Os índices mapeados dinamicamente ocupam mais espaço em disco do que os índices mapeados estaticamente e podem ter menos desempenho.
Quando você indexa dinamicamente um campo que contém dados polimórficos, o MongoDB 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 MongoDB Search não indexa automaticamente, o MongoDB Search não indexará esses dados.
O MongoDB Search indexa dinamicamente todos os campos em um documento usando as configurações padrão para o tipo de dados detectado. O MongoDB Search também indexa dinamicamente todos os documentos aninhados no documento, a menos que você substitua explicitamente definindo dynamic
para false
.
Para aprender quais tipos de dados suportam indexação dinâmica, veja a seção Tipos de dados abaixo.
Mapeamentos estáticos
Use o mapeamento estático 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 mapeamento estático, MongoDB Search indexa somente os campos que você especifica no mappings.fields
.
Quando você indexa estaticamente um campo que contém dados polimórficos, o MongoDB Search indexa somente documentos que correspondem ao mapeamento especificado na definição de índice para esse campo. A Pesquisa do MongoDB não indexa documentos que não correspondam ao tipo de dados especificado na definição de índice para esse campo.
Para especificar o índice para um campo aninhado, defina os mapeamentos para cada campo pai desse campo aninhado. Você não pode usar a notação de ponto para indexar estaticamente campos aninhados. Para ver exemplos, consulte os exemplos ou o Exemplo de mapeamento combinado abaixo.
Tipos de dados
A Pesquisa do MongoDB não suporta os seguintes tipos de dados BSON:
Decimal128
JavaScript code with scope
Tecla máxima
Min key
Expressão regular
Timestamp
A Pesquisa do MongoDB armazena automaticamente campos do tipo string no mongot
. Você pode armazenar campos de todos os tipos de dados suportados na MongoDB Search usando a opção Definir campos de origem armazenados no seu índice de pesquisa do MongoDB em sua definição de índice. Para saber mais sobre mongot
e a arquitetura de nó do MongoDB Search, consulte Opções de sistema do MongoDB Search.
A tabela a seguir enumera os tipos de dados BSON compatíveis e os tipos de campo do MongoDB Search que você pode usar para indexar os tipos de dadosBSON . A tabela também indica se o tipo de campo do MongoDB Search é incluído automaticamente em um índice do MongoDB Search quando você habilita mapeamentos dinâmicos e lista os operadores e coletores que você pode usar para consultar o valor do campo .
Tipo de JSON | Tipo de campo de pesquisa do MongoDB | Dinamicamente Indexado | operadores e coletores |
---|---|---|---|
✓ | Operadores que são compatíveis com o tipo de dados na array. | ||
Boolean | ✓ | ||
Data | ✓ | ||
Data | |||
Double | ✓ | ||
Double | |||
Double | |||
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.
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.
Observação
Você pode armazenar campos de todos os tipos de dados suportados na MongoDB Search usando a opção storedSource
.
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 pesquisa do MongoDB .
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.O campo
employees
, que é um conjunto de cadeias de caracteres. Ele usa o analisador lucene.standard por padrão para queries. Para indexar matrizes, o MongoDB Search exige apenas o tipo de dados dos elementos da matriz . 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 pesquisa do MongoDB .
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.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 } } } }