Ao criar um índice do MongoDB Search, você pode especificar quais campos indexar usando os seguintes métodos:
Mapeamentos dinâmicos: Habilite o MongoDB Search para indexar 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 indexar.
Limitações de tipos de dados
Por padrão, o MongoDB 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 aninhado embeddedDocument conta como um único objeto. 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, em que um objeto de índice é um documento de nível superior ou um documento incorporado, use a opção numPartitions para dividir seu índice (compatível somente com nós de pesquisa) ou fragmente seu cluster.
Você não pode indexar campos que contêm o sinal de dólar ($) no início do nome do campo.
Sintaxe
A seguinte sintaxe demonstra como habilitar a pesquisa MongoDB para indexar campos utilizando mapeamentos dinâmicos e estáticos. Para saber mais sobre mapeamentos dinâmicos e estáticos, consulte Mapeamentos dinâmicos e estáticos.
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 }
Mapeamentos dinâmicos e estáticos
Você pode configurar o MongoDB Search 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
Você também pode usar mapeamentos dinâmicos com mapeamentos estáticos. Os mapeamentos estáticos substituem a configuração de mapeamentos dinâmicos.
Mapeamentos dinâmicos
Os mapeamentos dinâmicos do MongoDB Search permitem configurar o MongoDB Search 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
mappingspara aplicar a todo o documento.[Recomendado] Dentro de um
documenttipo de campo para aplicar a um objeto especificado.[Recomendado] Em um
embeddedDocumentstipo de campo para aplicar a uma array especificada de objetos que exigem comparações de query por elemento (semelhante$elemMatcha).
Observação
Melhores práticas
Os mapeamentos dinâmicos podem resultar na indexação de um grande número de campos exclusivos, que ocuparão mais espaço em disco e podem ter menos desempenho. Use mapeamentos dinâmicos somente se precisar indexar campos que mudam regularmente ou que são desconhecidos. Sempre use mapeamentos dinâmicos em 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
typeSetem um objetodocumentem seus dados.Se um campo contiver dados polimórficos, o MongoDB Search indexará automaticamente o campo como todos os tipos suportados pelo
typeSetusado no índice. Se um campo contiver dados de um tipo não suportado pelotypeSet, o MongoDB Search não indexará estes dados.
Habilitar padrão typeSet
A Pesquisa do MongoDB usa o padrão typeSet quando dynamic é definido true como. No typeSet padrão, a Pesquisa do MongoDB indexa os tipos de BSON como tipos de campo do MongoDB Search. A tabela seguinte mostra os tipos BSON que o MongoDB Search indexa automaticamente como tipos de campo do MongoDB Search quando você utiliza o typeSet padrão. O MongoDB Search também indexa automaticamente os seguintes tipos de BSON quando eles estão contidos em arrays e objetos.
Tipo deJSON | Tipo de campo de pesquisa do MongoDB |
|---|---|
Boolean | |
Data | |
Duplo, 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 "typeSet": "<typset-name>" 5 }, 6 "typeSets": [ 7 { 8 "name": "<typset-name>", 9 "types": [ 10 { 11 "type": "<field-type>" 12 }, 13 ... 14 ] 15 }, 16 ... 17 ] 18 } 19 }
Para exemplos de índice que demonstram a indexação de todos os campos usando o typeSet padrão, consulte Exemplos de mapeamento dinâmico.
Configure um typeSet
Importante
Os mapeamentos dinâmicos configuráveis estão em versão prévia. O recurso e a documentação correspondente podem mudar a qualquer momento durante o período de Pré-visualização. Para saber mais, consulte Visualizar recursos.
Especifique os tipos de campo do MongoDB Search para indexar dinamicamente configurando typeSet um. Você pode configurar qualquer tipo de BSON para ser automaticamente indexado como qualquer tipo de campo do MongoDB Search,document exceto, embeddedDocuments ou tipos de campo obsoletos.
Um typeSet tem a seguinte sintaxe:
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çãotypeSetpara cada tipo de campo .Por exemplo, você não pode definir várias configurações para o tipo
numberna mesma definiçãotypeSet.Você pode configurar mapeamentos dinâmicos com o analisador
multi.
Você não pode configurar um typeSet a partir da UI do Atlas Visual Editor. Em vez disso, use a interface da UI JSON Editor do Atlas .
Para exemplos de índice que demonstram o uso de configuração typeSet personalizada, consulte Exemplos de mapeamento dinâmico.
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. Quando você utiliza mapeamentos estáticos, o MongoDB Search indexa somente os campos que você especifica mappings.fields no. Você também pode usar mapeamentos estáticos para excluir campos de serem indexados.
Para utilizar mapeamentos estáticos para configurar opções de índice para somente alguns campos,mappings.dynamic false defina para e especifique o nome do campo , tipo de dados e outras opções de configuração para cada campo que você deseja indexar. 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": true|false, 4 "fields": { 5 "<field-name>": { 6 "type": "<field-type>", 7 ... 8 }, 9 ... 10 } 11 } 12 }
Para definir o índice para um campo aninhado, você deve definir os mapeamentos para cada campo pai daquele campo aninhado. Você não pode usar notação de ponto para indexar estaticamente campos aninhados. Por exemplo, consulte os Exemplos ou Exemplo de mapeamento combinado abaixo.
Você pode usar mapeamentos estáticos para indexar campos como vários tipos. Para indexar um campo como vários tipos, defina os tipos na array de definição de campo para o campo. Você pode indexar qualquer campo como qualquer tipo suportado usando mapeamentos estáticos. Para saber mais, consulte Tipos de campo de pesquisa do MongoDB .
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 }
Para outros exemplos de índice que demonstram mapeamentos estáticos, consulte Exemplo de mapeamento estático.
Tipos de campo de pesquisa do MongoDB
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 dados BSON.A tabela também lista os operadores e coletores que você pode utilizar para consultar os valores de campo .
Tipo de JSON | Tipo de campo de pesquisa do MongoDB | 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 | Operadores que suportam os tipos de campo no objeto. | |
Objeto | embeddedDocument (para array de objetos) | |
ObjectId | ||
String | ||
String | ||
String | ||
String | ||
Esses operadores não suportam 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. Para saber mais sobre os tipos de campo de faceta obsoletos e suas contrapartes atualizadas, consulte Comparando tipos de campo de faceta.
Observação
Você pode armazenar campos de todos os tipos de dados suportados na MongoDB Search usando a opção storedSource.
Exemplos
Os exemplos seguintes utilizam a sample_mflix.movies coleção para demonstrar como configurar os campos para indexar utilizando mapeamentos dinâmicos e estáticos. Se você carregar os dados de amostra, poderá criar esses índices na coleção. Para saber como criar índices de pesquisa do MongoDB Search, consulte Início rápido do MongoDB Search.
Exemplos de mapeamento dinâmico
Os seguintes exemplos de definição de índice demonstram mapeamentos dinâmicos.
Nesta definição de índice, a bandeira booleana dynamic é definida como true para indexar automaticamente todos os campos indexáveis dinamicamente na collection.
{ mappings: { "dynamic": true } }
A seguinte definição de índice configura mapeamentos dinâmicos para os tipos de campo especificados. Ele indexa:
Todos os valores numéricos na coleção como o tipo de campo
numberutilizando as configurações padrão para esse tipo.Todos os valores de string na coleção como o tipo
autocompleteusando a estratégia de tokenizaçãoedgeGramcom um mínimo de quatro e um máximo de dez caracteres por token.
{ "mappings": { "dynamic": { "typeSet": "movieFieldTypes" } }, "typeSets": [ { "name": "movieFieldTypes", "types": [ { "type": "number" }, { "type": "autocomplete", "analyzer": "lucene.standard", "tokenization": "edgeGram", "minGrams": 4, "maxGrams": 10 } ] } ] }
Essa definição de índice:
Especifica o analisador de índice padrão como lucene.standard.
Especifica o analisador de pesquisa padrão como 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 .
Configura a indexação automática de todos os campos do
stringno nível raiz como os seguintes tipos de campo utilizando otypeSetdenominadofirst:tokendigite usando as configurações padrão do tipo.autocompletedigite usando as configurações padrão do tipo.
Especifica o mapeamento estático para o documento do
awards, que contém campos com valores numéricos e de texto. No entanto, a definição do índice configura a indexação automática de apenas campos do tiponumberno documento usando otypeSetdenominadosecond.
{ "mappings": { "dynamic": { "typeSet": "first" }, "fields": { "awards": { "type": "document", "dynamic": { "typeSet": "second" } } } }, "typeSets": [ { "name": "first", "types": [ { "type": "token" }, { "type": "autocomplete" } ] }, { "name": "second", "types": [ { "type": "number" } ] } ] }
Essa definição de índice:
Especifica o analisador de índice padrão como lucene.standard.
Especifica o analisador de pesquisa padrão como 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 .
Habilita a indexação automática de todos os campos indexáveis dinamicamente no nível raiz.
Habilita a indexação automática de todos os campos indexáveis dinamicamente dentro do documento
tomatoes, mas configura a indexação automática somente do tiponumberno documentotomatoes.viewer.
{ "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "mappings": { "dynamic": true, "fields": { "tomatoes": { "type": "document", "dynamic": true, "fields": { "viewer": { "type": "document", "dynamic": { "typeSet": "numericOnly" } } } } } }, "typeSets": [ { "name": "numericOnly", "types": [ { "type": "number" } ] } ] }
Exemplo de mapeamento estático
O seguinte exemplo de definição de índice demonstra mapeamentos estáticos.
Especifica o analisador de índice padrão como lucene.standard.
Especifica o analisador de pesquisa padrão como 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 .
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
awards, que é do tipodocument. Possui três subcampos incorporados,wins,nominationsetext.Os
winsnominationssubcampos e usam o analisador lucene.standard por padrão para queries. A Pesquisa do MongoDB indexaint64valores nonominationscampo.O
textsubcampo usa o analisador lucene.english por padrão para queries. Utiliza aignoreAboveopção para ignorar qualquer cadeia de mais de 255 bytes de comprimento.O campo
title, que é do tipostring. Ele usa o analisador lucene.whitespace por padrão para queries. Tem um analisadormultidenominadomySecondaryAnalyzerque utiliza o analisador lucene.french por padrão para queries.O campo
genres, 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": { "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": { "mySecondaryAnalyzer": { "type": "string", "analyzer": "lucene.french" } } }, "genres": { "type": "string", "analyzer": "lucene.standard" } } } }
Essa definição de índice:
Especifica o analisador de índice padrão como lucene.standard.
Especifica o analisador de pesquisa padrão como 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 .
Configura mapeamentos dinâmicos para tipos de campo específicos utilizando o
typeSetdenominadoindexedTypes, que especifica o seguinte:Os campos do tipo
stringdevem ser indexados automaticamente comotokentipo utilizando as configurações padrão para o tipotoken.Os campos do tipo
numberdevem ser indexados automaticamente comonumbertipo utilizando as configurações padrão para o tiponumber.
Exclui o campo
plotde ser indexado.
{ "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "mappings": { "dynamic": { "typeSet": "indexedTypes" }, "fields": { "plot": [] } }, "typeSets": [ { "name": "indexedTypes", "types": [ { "type": "token" }, { "type": "number" } ] } ] }
Exemplo de mapeamento combinado
Os seguintes exemplos de definição de índice combinam mapeamentos dinâmicos com mapeamentos estáticos.
Essa definição de índice:
Especifica o analisador de índice padrão como lucene.standard.
Especifica o analisador de pesquisa padrão como 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 .
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 é do tipostring. Ele usa o analisador lucene.whitespace por padrão para queries. Tem um analisadormultidenominadomySecondaryAnalyzerque utiliza o analisador lucene.french por padrão para queries.O campo
genres, que é um conjunto de cadeias de caracteres. Ele usa o analisador lucene.standard por padrão para consultas.O
awardscampo, que é dodocumenttipo. Possui três subcamposwinsincorporados,,nominationstexte. 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": { "title": { "type": "string", "analyzer": "lucene.whitespace", "multi": { "mySecondaryAnalyzer": { "type": "string", "analyzer": "lucene.french" } } }, "genres": { "type": "string", "analyzer": "lucene.standard" }, "awards": { "type": "document", "dynamic": true } } } }
Essa definição de índice:
Especifica o analisador de índice padrão como lucene.standard.
Especifica o analisador de pesquisa padrão como 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 .
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. Portanto, a definição do índice inclui somente o campoawards, que é do tipodocument.O campo
awardstem três subcampos incorporados,wins,nominationsetext. Em vez de indexar automaticamente todos os campos no documento configurando explicitamentedynamicparatrueou indexando explicitamente cada campo aninhado no documento usando mapeamentos estáticos, a definição de índice configura mapeamentos dinâmicos para o tipo de campodocumentusando o campo definição de tipos denominadamovieAwards:Campos de índice do tipo
stringutilizando analisadoreslucene.englishelucene.french.Campos de índice do tipo
numberutilizando as configurações padrão para o tiponumber.Campos de índice do tipo
stringe também do tipoautocompleteusando a estratégia de tokenizaçãoedgeGrampara criar tokens entre três a cinco caracteres de comprimento.{ "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "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" }, { "type": "autocomplete", "analyzer": "lucene.standard", "tokenization": "edgeGram", "minGrams": 3, "maxGrams": 5, "foldDiacritics": false } ] } ] }
Nesta definição de índice:
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 dinâmicos para os tipos de campo definidos na definição
typeSetdenominadafirst. A definiçãofirsttypeSetindexa todos os campos do tipostringcomo o tipotokene todos os campos do tiponumbercomo o tiponumberutilizando configurações padrão para os tipos de campo .A definição de índice especifica mapeamentos estáticos para o campo
awards, mas configura mapeamentos dinâmicos para campos no documentoawardsusando otypeSetdenominadosecond. A definição do tipo de camposecondindexa todos os campos do tipostringno documentoawardscomo tipoautocompleteusando as configurações padrão para esse tipo.
{ "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "mappings": { "dynamic": { "typeSet": "first" }, "fields": { "awards": { "type": "document", "dynamic": { "typeSet": "second" } } } }, "typeSets": [ { "name": "first", "types": [ { "type": "token" }, { "type": "number" } ] }, { "name": "second", "types": [ { "type": "autocomplete" } ] } ] }