Cuando se crea un índice de MongoDB Search, se puede especificar qué campos indexar utilizando los siguientes métodos:
Mapeos dinámicos: permite que la búsqueda de MongoDB indexe automáticamente todos los campos según un conjunto de tipos de campo por defecto o configurado (
typeSet).Mapeos estáticos: Permiten especificar qué campos se deben indexar.
Limitaciones de tipos de datos
Por defecto, MongoDB Search deja de replicar cambios para índices superiores a 2,100,000,000 objetos de índice en un set de réplicas o una sola partición, donde cada documento indexado o
embeddedDocumentanidado cuenta como un solo objeto. Esto significa que el índice sigue siendo consultable, pero se podrían obtener resultados desactualizados.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.
No puedes indexar campos que contengan el signo de dólar (
$) al inicio del nombre del campo.El tipo de campo autocomplete puede crear índices grandes y tardar más en compilarse que otros tipos de campo. Aunque puede usar el tipo
autocompleteen asignaciones dinámicas al incluirlo en una definicióntypeSetpersonalizada, recomendamos usar el tipoautocompletesolo en asignaciones estáticas para evitar implicaciones no deseadas en el rendimiento, el almacenamiento y la puntuación. Para obtener más información, consulte Cómo indexar campos para autocompletar y Mejorar el rendimiento del índice de búsqueda de MongoDB Search.
Sintaxis
La siguiente sintaxis demuestra cómo activar MongoDB Search para la creación de índices en campos utilizando mapeos dinámicos y estáticos. Para aprender más sobre los mapeos dinámicos y estáticos, se puede consultar Mapeos dinámicos y 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 }
Mapeos dinámicos y estáticos
Se puede configurar MongoDB Search con:
Mapeos dinámicos para indexar automáticamente los campos según un conjunto por defecto o configurado de tipos (
typeSet)Mapeos estáticos para indexar solo campos especificados
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 ejemplo, si habilitas dynamic: true, MongoDB Search indexa los campos de string como el tipo string de forma predeterminada. Si luego agrega una asignación estática autocomplete para un campo de string específico, MongoDB Search indexa ese campo solo como el tipo autocomplete. Tampoco se indexa como string a menos que incluya explícitamente string en la asignación estática. Para indexar el campo como ambos tipos, debe definir ambos tipos en el arreglo de asignación estática del campo.
Mapeos dinámicos
Los mapeos dinámicos de MongoDB Search permiten configurar MongoDB Search para indexar automática y recursivamente los campos en los datos. Los campos se pueden indexar en función del conjunto de tipos por defecto o configurando un typeSet.
Se pueden activar o configurar mapeos dinámicos:
En el nivel raíz
mappingspara aplicarse a todo el documento.[Recomendado] Dentro de un tipo de campo
documentpara aplicarlo a un objeto especificado.[Recomendado] Dentro de un tipo de campo
embeddedDocumentspara aplicar a un arreglo especificado de objetos que requieren comparaciones de queries elemento por elemento (similar a$elemMatch).
Nota
Mejores prácticas
Los mapeos dinámicos podrían resultar en la indexación de un alto número de campos únicos, lo que ocupa más espacio en disco y podría ser menos eficiente. Utilice asignaciones dinámicas únicamente si necesita índice campo que cambian regularmente o que son desconocidos. Utilice siempre asignaciones dinámicas dentro de un documento, no a nivel del documento principal.
Cuando se utilizan mapeos dinámicos para crear un índice para los datos:
MongoDB Search también indexa dinámicamente todos los campos anidados admitidos por el
typeSeten un objetodocumenten los datos.Si un campo contiene datos polimórficos, MongoDB Search indexa automáticamente el campo como todos los tipos admitidos por el
typeSetutilizado en el índice. Si un campo contiene datos de un tipo no compatible contypeSet, MongoDB Search no indexará esos datos.
Activar por defecto typeSet
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.
Tipo BSON | Tipo de campo de búsqueda de MongoDB |
|---|---|
Booleano | |
fecha | |
Double, entero de 32 bits, entero de 64 bits | |
ObjectId | |
String | |
UUID | |
Nulo |
La siguiente es la sintaxis para activar el conjunto de tipos por defecto para las asignaciones dinámicas:
1 { 2 "mappings": { 3 "dynamic": true 4 } 5 }
For index examples that demonstrate indexing all fields using the default typeSet, see Dynamic Mapping Examples.
Configure una typeSet
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.
Un typeSet tiene la siguiente sintaxis:
Nota
No se puede configurar un typeSet desde la interfaz de usuario de Atlas Visual Editor. Utilizar la interfaz de usuario de Atlas JSON Editor en su lugar.
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 un typeSet, se debe considerar lo siguiente:
No se puede definir el mismo tipo de campo varias veces en el mismo objeto
typeSet. Solo se puede configurar una única definicióntypeSetpara cada tipo de campo.Por ejemplo, no se pueden definir múltiples configuraciones para el tipo
numberen la misma definición detypeSet.Se pueden configurar mapeos dinámicos con el analizador
multi.
Para ejemplos de índice que demuestran el uso de la configuración personalizada de typeSet, consultar Ejemplos de mapeo dinámico.
Mapeos estáticos
Utilizar mapeos estáticos para configurar opciones de índice para campos que no se desea indexar dinámicamente, o para configurar un solo campo independientemente de otros en un índice. Cuando se utilizan asignaciones estáticas, MongoDB Search crea índices de búsqueda solo de los campos que se especifican en mappings.fields. También se pueden utilizar asignaciones estáticas para excluir campos del índice.
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.
Si omite el campo mappings.dynamic, se establece por defecto en 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 el índice de un campo anidado, se deben definir los mapeos para cada campo principal de ese campo anidado. No se puede usar la notación de puntos para usar el índice de campos anidados de forma estática. Para ver ejemplos, se pueden consultar los Ejemplos o Ejemplo de mapeo combinado a continuación.
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.
El siguiente ejemplo muestra la definición de un campo para la indexación del mismo como múltiples tipos.
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.
Tipos de campo de búsqueda de MongoDB
MongoDB Search doesn't support the following BSON data types:
Decimal128
Código JavaScript con alcance
Clave máxima
Min key
Expresión regular
Marca de tiempo
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.
La siguiente tabla enumera los tipos de datos BSON admitidos y los tipos de campos de MongoDB Search que se pueden utilizar para indexar los tipos de datos BSON. La tabla también enumera los operadores y colectores que se pueden utilizar para hacer queries de los valores de los campos.
Tipo BSON | Tipo de campo de búsqueda de MongoDB | Operadores y recolectores |
|---|---|---|
Operadores que admiten el tipo de datos en el arreglo. | ||
Booleano | ||
fecha | ||
fecha | ||
Double | ||
Double | ||
Double | ||
entero de 32 bits | ||
entero de 32 bits | ||
entero de 64 bits | ||
entero de 64 bits | ||
Nulo | N/A | |
Objeto | Operadores que brindan soporte a los tipos de campo en el objeto. | |
Objeto | embeddedDocument (para un arreglo de objetos) | |
ObjectId | ||
String | ||
String | ||
String | ||
String | ||
vector |
Estos operadores no brindan soporte para un arreglo de strings.
MongoDB Search no incluye un tipo de campo para la indexación de valores nulos porque MongoDB Search indexa automáticamente los valores nulos tanto para campos indexados de forma estática como dinámica.
Obsoleto. Para aprender más sobre los tipos de campo de faceta obsoletos y sus contrapartes actualizadas, se puede consultar Comparación de tipos de campo para facetas.
Arreglo de valores de double o int.
Nota
You can store fields of all supported data types on MongoDB Search using the storedSource option.
Ejemplos
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.
Ejemplos de mapeo dinámico
Las siguientes definiciones de índices de muestra demuestran cómo utilizar mappings dinámicos.
Ejemplo de asignación estática
Las siguientes definiciones de índices de muestra demuestran cómo utilizar mapeos estáticos.
Ejemplo de asignación combinada
Los siguientes ejemplos de definiciones de índices combinan mapeos dinámicos con mapeos estáticos.