Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

Define las asignaciones de campos

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.

Por defecto, MongoDB Search deja de replicar cambios para índices superiores a 2.1 mil millones de objetos de índice en un set de réplicas o una sola partición, donde cada documento indexado o embeddedDocument anidado cuenta como un solo objeto. Esto significa que el índice sigue siendo consultable, pero se podrían obtener resultados desactualizados.

Si se planea indexar campos que podrían exceder 2.1 mil millones de objetos, donde un objeto de índice es un documento de nivel superior o un documento incrustado, usar la opción de índice numPartitions para particionar el índice (compatible solo con la implementación de nodos de búsqueda) o particionar el clúster.

No puedes indexar campos que contengan el signo de dólar ($) al inicio del nombre del campo.

La siguiente sintaxis muestra cómo habilitar la búsqueda de MongoDB para indexar campos mediante asignaciones dinámicas y estáticas. Para obtener más información sobre las asignaciones dinámicas y estáticas, consulte Asignaciones dinámicas y estáticas.

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}

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

También puede utilizar asignaciones dinámicas junto con asignaciones estáticas. Las asignaciones estáticas anulan la configuración de las asignaciones dinámicas.

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 mappings para aplicarse a todo el documento.

  • [Recomendado] Dentro de un tipo de campo document para aplicarlo a un objeto especificado.

  • [Recomendado] Dentro de un tipo de campo embeddedDocuments para 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 ocupará más espacio en disco y podría ser menos eficiente. Se deben utilizar únicamente asignaciones dinámicas si se necesita crear un índice de campos que cambian regularmente o que son desconocidos. Siempre se deben utilizar 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 typeSet en un objeto document en los datos.

  • Si un campo contiene datos polimórficos, MongoDB Search indexa automáticamente el campo como todos los tipos admitidos por el typeSet utilizado en el índice. Si un campo contiene datos de un tipo no compatible con typeSet, MongoDB Search no indexará esos datos.

MongoDB Search utiliza el typeSet por defecto cuando dynamic se establece en true. En el typeSet por defecto, MongoDB Search indexa los tipos BSON como tipos de campo de MongoDB Search. La siguiente tabla muestra los tipos de BSON que MongoDB Search indexa automáticamente como tipos de campo de MongoDB Search cuando se utiliza el typeSet por defecto. MongoDB Search también indexa automáticamente los siguientes tipos BSON cuando están contenidos dentro de arreglos y objetos.

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}

Para ver ejemplos de índices que demuestran cómo indexar todos los campos usando el valor typeSet predeterminado, consulte Ejemplos de asignación dinámica.

Especificar los tipos de campos de MongoDB Search para la indexación de forma dinámica configurando un typeSet. Se puede configurar cualquier tipo de BSON para que se indexe automáticamente como cualquier tipo de campo de MongoDB Search, excepto document, embeddedDocuments, vector, o los tipos de campo obsoletos.

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ón typeSet para cada tipo de campo.

    Por ejemplo, no se pueden definir múltiples configuraciones para el tipo number en la misma definición de typeSet.

  • Se pueden configurar mapeos dinámicos con el analizador multi.

Para ver ejemplos de índices que demuestran el uso de una configuración typeSet personalizada, consulte Ejemplos de asignación dinámica.

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.

Para usar asignaciones estáticas y configurar las opciones de indexación solo para algunos campos,mappings.dynamic false cambie a y especifique el nombre del campo, eltipo de datos y otras opciones de configuración para cada campo que desee indexar. Puede especificar los campos en cualquier orden.

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, debe definir las asignaciones para cada campo padre de dicho campo anidado. No puede usar la notación de puntos para indexar estáticamente campos anidados. Para ver ejemplos, consulte los ejemplos o el ejemplo de asignación combinada a continuación.

Puedes usar asignaciones estáticas para indexar campos como varios tipos. Para indexar un campo como varios tipos, define los tipos en la matriz de definición de campo. Puedes indexar cualquier campo como cualquier tipo compatible mediante asignaciones estáticas. Para obtener más información, consulta Tipos de campos de búsqueda de MongoDB.

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}

Para ver otros ejemplos de índices que demuestran asignaciones estáticas, consulte el Ejemplo de asignación estática.

MongoDB Search no admite los siguientes tipos de datos BSON:

  • Decimal128

  • Código JavaScript con alcance

  • Clave máxima

  • Min key

  • Expresión regular

  • Marca de tiempo

MongoDB Search almacena automáticamente los campos de tipo cadena mongoten. Puede almacenar campos de todos los tipos de datos compatibles en MongoDB Search mediante la opción Definir campos de origen almacenados en su índice de MongoDB Search en la definición de su índice. Para obtener más información sobre mongot y ​​la arquitectura de nodos de MongoDB Search, consulte Opciones de implementación de MongoDB Search.

La siguiente tabla enumera los tipos de datos BSON compatibles y los tipos de campos de búsqueda de MongoDB que puede usar para indexar dichos tipos de datos.La tabla también incluye los operadores y recolectores que puede usar para consultar 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

Puedes almacenar campos de todos los tipos de datos admitidos en MongoDB Search usando la storedSource opción.

Los siguientes ejemplos utilizan la colección sample_mflix.movies para demostrar cómo configurar los campos para indexar usando mapeos dinámicos y estáticos. Si carga los datos de muestra, se pueden crear estos índices en la colección. Para aprender a crear índices de búsqueda de MongoDB, se puede consultar Inicio rápido de MongoDB Search.

Los siguientes ejemplos de definición de índices demuestran mapeos dinámicos.

Se pueden configurar las asignaciones dinámicas para indexar automáticamente solo los tipos de campo especificados utilizando la definición personalizada de typeSet.

La siguiente definición de índice configura mapeos dinámicos para los tipos de campos especificados. Indexa:

  • Todos los valores numéricos de la colección como el tipo de campo number utilizando la configuración por defecto para ese tipo.

  • Todos los valores de string en la colección como el tipo autocomplete utilizando la estrategia de tokenización edgeGram con un mínimo de cuatro y un máximo de diez caracteres por token.

{
"mappings": {
"dynamic": {
"typeSet": "movieFieldTypes"
}
},
"typeSets": [
{
"name": "movieFieldTypes",
"types": [
{
"type": "number"
},
{
"type": "autocomplete",
"analyzer": "lucene.standard",
"tokenization": "edgeGram",
"minGrams": 4,
"maxGrams": 10
}
]
}
]
}

Se pueden configurar diferentes asignaciones dinámicas a nivel raíz y para campos anidados utilizando una definición personalizada de typeSet.

Esta definición de índice:

  • Especifica el analizador de índices por defecto como lucene.standard.

  • Especifica el analizador de búsqueda por defecto como lucene.standard. Se puede cambiar el analizador de búsqueda si se desea que el término de query se analice de manera diferente a cómo está almacenado en el índice de MongoDB Search.

  • Configurar la indexación automática de todos los campos string en el nivel raíz como los siguientes tipos de campo utilizando el typeSet llamado first:

    • token escribir usando la configuración por defecto para el tipo.

    • autocomplete escribir usando la configuración por defecto para el tipo.

  • Especifica la asignación estática para el documento awards, que contiene campos con valores numéricos y de texto. Sin embargo, la definición del índice configura la indexación automática solo de los campos de tipo number en el documento utilizando el typeSet llamado second.

{
"mappings": {
"dynamic": {
"typeSet": "first"
},
"fields": {
"awards": {
"type": "document",
"dynamic": {
"typeSet": "second"
}
}
}
},
"typeSets": [
{
"name": "first",
"types": [
{
"type": "token"
},
{
"type": "autocomplete"
}
]
},
{
"name": "second",
"types": [
{
"type": "number"
}
]
}
]
}

Configurar mapeos dinámicos, pero excluir campos de ser indexados mediante mapeos estáticos.

Esta definición de índice:

  • Especifica el analizador de índices por defecto como lucene.standard.

  • Especifica el analizador de búsqueda por defecto como lucene.standard. Se puede cambiar el analizador de búsqueda si se desea que el término de query se analice de manera diferente a cómo está almacenado en el índice de MongoDB Search.

  • Configurar las asignaciones dinámicas para tipos de campos específicos utilizando el typeSet denominado indexedTypes, que especifica el siguiente comportamiento:

    • Indexa automáticamente los campos del tipo string como el tipo token.

    • Indexa automáticamente los campos del tipo number como el tipo number.

  • Excluir el campo plot de ser indexado.

{
"analyzer": "lucene.standard",
"searchAnalyzer": "lucene.standard",
"mappings": {
"dynamic": {
"typeSet": "indexedTypes"
},
"fields": {
"plot": []
}
},
"typeSets": [
{
"name": "indexedTypes",
"types": [
{
"type": "token"
},
{
"type": "number"
}
]
}
]
}

El siguiente ejemplo de definición de índice demuestra mapeos estáticos.

Desactivar las asignaciones dinámicas, pero definir campos individuales para la indexación.

  • Especifica el analizador de índices por defecto como lucene.standard.

  • Especifica el analizador de búsqueda por defecto como lucene.standard. Se puede cambiar el analizador de búsqueda si se desea que el término de query se analice de manera diferente a cómo está almacenado en el índice de MongoDB Search.

  • Especifica las asignaciones de campos estáticas (dynamic: false), lo que significa que los campos que no se mencionan explícitamente no se indexan. Por lo tanto, la definición del índice incluye:

    • El campo awards, que es de tipo document. Tiene tres subcampos incrustados, wins, nominations y text.

      Los subcampos wins y nominations utilizan el analizador lucene.standard por defecto para los queries. MongoDB Search usa índices de búsqueda para indexar valores int64 en el campo nominations.

      El subcampo text utiliza el analizador lucene.english por defecto para los queries. Utiliza la opción ignoreAbove para ignorar cualquier string de más de 255 bytes de longitud.

    • El campo title, que es de tipo string. Utiliza el analizador lucene.whitespace por defecto para las queries. Tiene un analizador multi llamado mySecondaryAnalyzer que utiliza el analizador lucene.french por defecto para las queries.

    • El campo genres, que es un arreglo de strings de texto. Utiliza el analizador lucene.standard por defecto para los queries. Para la indexación de arreglos, MongoDB Search solo requiere el tipo de dato de los elementos del arreglo. No es necesario especificar que los datos están contenidos en un arreglo en la definición del í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"
}
}
}
}

Los siguientes ejemplos de definiciones de índices combinan mapeos dinámicos con mapeos estáticos.

Desactivar las asignaciones dinámicas en el nivel raíz, pero definir las asignaciones estáticas y activar las asignaciones dinámicas para los campos anidados.

Esta definición de índice:

  • Especifica el analizador de índices por defecto como lucene.standard.

  • Especifica el analizador de búsqueda por defecto como lucene.standard. Se puede cambiar el analizador de búsqueda si se desea que el término de query se analice de manera diferente a cómo está almacenado en el índice de MongoDB Search.

  • Especifica asignaciones de campos estáticos (dynamic: false), lo que significa que los campos y los tipos de campos que no se mencionan explícitamente no se indexan. Por lo tanto, la definición del índice incluye:

    • El campo title, que es de tipo string. Utiliza el analizador lucene.whitespace por defecto para las queries. Tiene un analizador multi llamado mySecondaryAnalyzer que utiliza el analizador lucene.french por defecto para las queries.

    • El campo genres, que es un arreglo de strings. Utiliza el analizador lucene.standard por defecto para las queries.

    • El campo awards, que es de tipo document. Tiene tres subcampos incrustados, wins, nominations y text. En lugar de mencionar explícitamente cada campo anidado en el documento, la definición del índice permite el mapeo dinámico de todos los subcampos en el documento. Utilizar el analizador lucene.standard por defecto para los 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
    }
    }
    }
    }

Configure mapeos dinámicos para tipos de campo específicos y defina mapeos estáticos para campos individuales.

Esta definición de índice:

  • Especifica el analizador de índices por defecto como lucene.standard.

  • Especifica el analizador de búsqueda por defecto como lucene.standard. Se puede cambiar el analizador de búsqueda si se desea que el término de query se analice de manera diferente a cómo está almacenado en el índice de MongoDB Search.

  • Especifica asignaciones de campos estáticos (dynamic: false), lo que significa que los campos y los tipos de campos que no se mencionan explícitamente no se indexan. Por lo tanto, la definición del índice incluye solo el campo awards, que es de tipo document.

    El campo awards tiene tres subcampos incrustados, wins, nominations y text. En lugar de mediante la indexación automática de todos los campos del documento estableciendo explícitamente dynamic en true o mediante indexación explícita de cada campo anidado del documento utilizando mapeos estáticos, la definición del índice configura mapeos dinámicos para el tipo de campo document utilizando la definición de tipos de campo denominada movieAwards:

    • Indexar campos de tipo string utilizando tanto los analizadores lucene.english como lucene.french.

    • Indexar campos de tipo number utilizando la configuración por defecto para el tipo number.

    • Indexar los campos de tipo string y también de tipo autocomplete utilizando la estrategia de tokenización edgeGram para crear tokens de entre tres y cinco caracteres de longitud.

      {
      "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
      }
      ]
      }
      ]
      }

Configurar mapeos dinámicos en el nivel raíz y dentro de mapeos estáticos para campos anidados.

En esta definición de índice:

  • El analizador por defecto del índice es lucene.standard.

  • El analizador de búsqueda por defecto es lucene.standard. Se puede cambiar el analizador de búsqueda si se desea que el término de query se analice de manera diferente a cómo está almacenado en el índice de MongoDB Search.

  • El índice especifica mapeos dinámicos para los tipos de campo definidos en la definición typeSet llamada first. La definición de first typeSet indexa todos los campos de tipo string como el tipo token y todos los campos de tipo number como el tipo number utilizando la configuración por defecto para los tipos de campo.

  • La definición del índice especifica asignaciones estáticas para el campo awards, pero configura asignaciones dinámicas para los campos en el documento awards utilizando el typeSet llamado second. La definición del tipo de campo second indexa todos los campos de tipo string en el documento awards como tipo autocomplete usando la configuración por defecto para ese 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"
}
]
}
]
}