Como indexar campos em arrays de objetos e documentos
Nesta página
Observação
A opção de índice embeddedDocuments do Atlas Search, o operadorembeddedDocument e a opção de pontuação embedded
estão em pré-visualização. Quando um índice do Atlas Search em um conjunto de réplicas ou shard do MongoDB atinge o limite de dois bilhões de documentos do Lucene, o Atlas Search não indexa novos documentos nem aplica atualizações a documentos existentes para esse índice. Uma solução para acomodar essa limitação será implementada quando esse recurso estiver geralmente disponível. Para solucionar qualquer problema relacionado ao uso dessa funcionalidade, entre em contato com o Suporte.
Você pode usar o tipo embeddedDocuments
do Atlas Search para indexar campos em documentos e objetos que são elementos de uma array. O Atlas Search indexa documentos incorporados independente do documento principal. Cada documento indexado contém apenas campos que fazem parte do elemento de array do documento incorporado. Você pode usar somente o operador embeddedDocument para campos de query indexados como tipo embeddedDocuments
.
O Atlas Search não indexa dinamicamente campos de índice do tipo embeddedDocument
. Você deve utilizar mapeamentos estáticos para indexar campos do embeddedDocument
. Você pode usar o Visual Editor ou o JSON Editor na UI do Atlas para indexar campos do tipo embeddedDocument
.
embeddedDocuments
Revise as limitações de tipo
Observação
O Atlas Search não permite a indexação de mais de dois bilhões de objetos de índice, em que cada documento incorporado indexado conta como um único objeto. O uso do tipo de campo embeddedDocuments
pode resultar na indexação de objetos acima desse limite, o que faz com que um índice passe para um estado de falha. Se sua coleção tiver matrizes grandes que podem gerar dois bilhões de objetos, você deverá fragmentar todos os clusters que contenham índices com o tipo embeddedDocuments
.
Aplicam-se as seguintes limitações:
Você pode utilizar o
embeddedDocuments
somente em campos com até5
níveis de aninhamento. Um campoembeddedDocuments
não pode ter mais de4
camposembeddedDocuments
pai.Não é possível usar
embeddedDocuments
para uma facet de data ou número.Você não pode definir um campo dentro do tipo
embeddedDocuments
como o tipo knnVector.Você não pode indexar filhos de campos indexados com tipo
embeddedDocuments
igual a token.Para destacar campos em documentos incorporados, você também deve indexar o principal do campo que deseja destacar como o tipo de documento.
Você pode fazer o seguinte somente se indexar os pais do campo filho do documento incorporado como o tipo de documento :
Pesquisa facetada em campos de string em documentos incorporados. Você também deve indexar o campo em que deseja facetar como o tipo stringFacet .
Observação
Quando facetas são utilizadas em um campo de string dentro de documentos incorporados, o Atlas Search retorna a contagem de facetas somente para o número de documentos principais correspondentes.
Não é possível facetar campos numéricos e de data em documentos incorporados.
Realce campos em documentos incorporados. Para ver um exemplo, consulte o tutorial How to Run Atlas Search Queries Against Objects in Arrays .
Classifique pelo pai do campo de documento incorporado. Você também deve indexar o campo do documento incorporado com valores de string como o tipo de token . Para campos filho com valores de número e data, habilite o mapeamento dinâmico para indexar esses campos automaticamente. Para obter um exemplo, consulte Exemplo de classificação.
Definir o índice para o embeddedDocument
tipo
Para definir o índice para o tipo embeddedDocument
, escolha seu método de configuração preferido na UI do Atlas e então selecione o banco de dados e collection.
Clique em Refine Your Index para configurar seu índice.
Na seção Field Mappings, clique em Add Field para abrir a janela Add Field Mapping.
Selecione o campo a ser indexado no menu suspenso Field Name.
Observação
Você não pode indexar campos que contêm o sinal de dólar (
$
) no início do nome do campo.Clique no menu suspenso Data Type e selecione EmbeddedDocument.
Alterne a configuração de Enable Dynamic Mapping para habilitar ou desabilitar a indexação dinâmica de todos os campos indexáveis dinamicamente no documento. Para saber mais, consulte Como configurar as propriedades do campo
document
.Clique em Add.
Se você desativou o mapeamento dinâmico, clique em Add Embedded Field para o campo de tipo EmbeddedDocument para definir mapeamentos de campo para os campos do documento.
A seguir está a sintaxe JSON para o tipo embeddedDocument
. Substitua a definição de índice padrão pelo seguinte. Para saber mais sobre os campos, consulte Propriedades do Campo.
1 { 2 "mappings": { 3 "dynamic": true|false, 4 "fields": { 5 "<field-name>": { 6 "type": "embeddedDocuments", 7 "dynamic": true|false, 8 "fields": { 9 "<field-name>": { 10 <field-mapping-definition> 11 } 12 } 13 } 14 } 15 } 16 }
Configurar embeddedDocument
propriedades de campo do
O tipo embeddedDocuments
do Atlas Search usa os seguintes parâmetros:
Campo | Tipo | necessidade | Descrição | default |
---|---|---|---|---|
type | string | Obrigatório | Etiqueta legível por humanos que identifica o tipo de campo. O valor deve ser embeddedDocuments . | |
dynamic | booleano | Opcional | Sinalizador que especifica se deve indexar todo campo dinamicamente indexável no documento. O valor pode ser um dos seguintes:
| false |
fields | documento | Opcional | Campos para indexar. Se Se ObservaçãoO Atlas Search não aceita indexação de campos facet como parte de um campo | {} |
Experimente um exemplo para o embeddedDocument
tipo de
O exemplo de definição de índice abaixo utiliza a collection sample_supplies.sales . Se você já tiver os dados de amostra carregados em seu cluster, poderá usar o Visual Editor ou o Editor JSON na UI do Atlas para configurar o índice. Após selecionar seu método de configuração preferido, selecione o banco de dados e a coleção e filtre seu índice para adicionar mapeamentos de campo.
A seguinte definição de índice indexa a array de objetos no campo items
. Ele também configura o Atlas Search para indexar automaticamente todos os campos indexáveis dinamicamente dentro dos objetos na array items
.
Na janela Add Field Mapping, selecione items no menu suspenso Field Name.
Clique no menu suspenso Data Type e selecione EmbeddedDocuments.
Alterne o Enable Dynamic Mapping para habilitar o mapeamento dinâmico, se necessário.
Clique em Add.
Substitua a definição de índice padrão pela seguinte definição de índice.
1 { 2 "mappings": { 3 "fields": { 4 "items": { 5 "type": "embeddedDocuments", 6 "dynamic": true 7 } 8 } 9 } 10 }
Observação
Para indexar todos os campos em um documento embutido incluindo campos que o Atlas Search não indexa dinamicamente, defina os campos na definição de índice. Para faceting de string, o Atlas Search conta facets de string uma vez para cada documento no conjunto de resultados.
Por exemplo, a definição de índice a seguir configura o Atlas Search para indexar automaticamente todos os campos indexáveis dinamicamente dentro dos objetos na array items
. Ele também configura o campo purchaseMethod
dentro da array de objetos para ser indexado como stringFacet, que o Atlas Search não indexa dinamicamente, para suportar as queries de facet do Atlas Search nesse campo:
Clique em Add Field na seção Field Mappings e adicione os seguintes campos clicando em Add após configurar as configurações para cada campo na janela Add Field Mapping.
Field Name | Data Type |
---|---|
items | Clique no menu suspenso e selecione EmbeddedDocuments . |
purchaseMethod | Clique no menu suspenso e selecione StringFacet . |
1 { 2 "mappings": { 3 "dynamic": true, 4 "fields": { 5 "items": { 6 "dynamic": true, 7 "type": "embeddedDocuments" 8 }, 9 "purchaseMethod": { 10 "type": "stringFacet" 11 } 12 } 13 } 14 }
A definição de índice a seguir configura o Atlas Search para indexar somente os campos name
e tags
como o tipo string
do Atlas Search na array de objetos items
.
Na janela Add Field Mapping, selecione items no menu suspenso Field Name.
Clique no menu suspenso Data Type e selecione EmbeddedDocuments.
Desative Enable Dynamic Mapping.
Clique em Add.
Clique em Add Embedded Field para o campo items na tabela Field Mappings e adicione os seguintes campos clicando em Add após configurar as configurações para cada campo na janela Add Embedded Field Mapping .
Field NameData Typeitems.nameClique no menu suspenso Data Type e selecione String.items.tagsClique no menu suspenso Data Type e selecione String.
Substitua a definição de índice padrão pela seguinte definição de índice.
1 { 2 "mappings": { 3 "fields": { 4 "items": { 5 "type": "embeddedDocuments", 6 "dynamic": false, 7 "fields": { 8 "name": { 9 "type": "string" 10 }, 11 "tags": { 12 "type": "string" 13 } 14 } 15 } 16 } 17 } 18 }