Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
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 tienes previsto indexar campos que puedan superar los 2.1 mil millones de objetos, donde un objeto de índice es un documento de nivel superior o un documento incrustado, utiliza la opción de índice numPartitions para dividir tu índice (solo admitido en la implementación de nodos de búsqueda) o fragmenta tu clúster.

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

  • El tipo de campo de autocompletado puede crear índices grandes y tardar más en compilarse que otros tipos de campos. Aunque puedes usar el tipo autocomplete en asignaciones dinámicas incluyéndolo en una definición personalizada typeSet, recomendamos usar el tipo autocomplete solo en asignaciones estáticas para evitar posibles implicaciones no deseadas en el rendimiento, el almacenamiento y la puntuación. Para obtener más información, consulte Cómo indexar campos para autocompletado y Rendimiento del índice de búsqueda de MongoDB.

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}

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 con asignaciones estáticas. Las asignaciones estáticas tienen prioridad sobre 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 por defecto typeSet cuando dynamic está configurado en true. En el typeSet por defecto, MongoDB Search indexa los tipos BSON como tipos de campos de MongoDB Search. La siguiente tabla muestra los tipos BSON que MongoDB Search indexa automáticamente como tipos de campo de MongoDB Search cuando se utiliza la configuración por defecto typeSet. MongoDB Search también indexa automáticamente los siguientes tipos de 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 la indexación de todos los campos utilizando el valor por defecto typeSet, se puede consultar Ejemplos de mapeo dinámico.

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 búsqueda de MongoDB, 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 ejemplos de índice que demuestran el uso de la configuración personalizada de typeSet, consultar Ejemplos de mapeo dinámico.

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 utilizar asignaciones estáticas para configurar las opciones de índice solo para algunos campos, se debe establecer mappings.dynamic en false y especificar el nombre del campo, tipo de dato y otras opciones de configuración para cada campo que se desee indexar. Se pueden 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, 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.

Se pueden utilizar mapeos estáticos para indexar campos como múltiples tipos. Para indexar un campo como varios tipos, se deben definir los tipos en el arreglo de definición del campo. Se puede indexar cualquier campo como cualquier tipo admitido usando mapeos estáticos. Para aprender más, se puede consultar Tipos de campos de MongoDB Search.

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 otros ejemplos de índices que demuestran mapeos estáticos, se puede consultar Ejemplo de mapeo estático.

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 campos de tipo string en mongot. Se pueden almacenar campos de todos los tipos de datos compatibles en MongoDB Search usando la opción Definir campos fuente almacenados en su índice de MongoDB Search en la definición del índice. Para aprender más sobre mongot y la arquitectura de nodos de MongoDB Search, se puede consultar Opciones de implementación de MongoDB Search.

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 indica los operadores y coleccionistas que se pueden 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

Puede almacenar campos de todos los tipos de datos soportados en MongoDB Búsqueda usando la opción storedSource.

Las siguientes definiciones de índices de ejemplo en la colección sample_mflix.movies demuestran cómo indexar campos mediante mapeos dinámicos y estáticos. Puede cargar los datos de muestra en su clúster para probar los ejemplos. Para obtener más información sobre cómo crear índices de búsqueda de MongoDB, consulta Guía rápida de MongoDB Search.

Las siguientes definiciones de índices de muestra demuestran cómo utilizar mappings dinámicos.

Habilita el mapeo dinámico para indexar automáticamente los tipos de campos de string.

La siguiente definición de índice:

  • Permite asignaciones dinámicas a nivel raíz para indexar automáticamente campos en la colección según la definición typeSet llamada only_strings, que indexa campos de string en la colección con la opción de índice positions y con store configurado en false. Estas opciones de configuración ahorran espacio en disco al no almacenar los valores de los campos ni los desplazamientos de los términos para el resaltado de queries.
{
"mappings": {
"dynamic": {
"typeSet": "only_strings"
}
},
"typeSets": [
{
"name": "only_strings",
"types": [
{
"type": "string",
"store": false,
"indexOptions": "positions"
}
]
}
]
}

Habilitar mapeos dinámicos dentro de un campo de tipo documento para indexar automáticamente campos anidados.

La siguiente definición de índice:

  • Permite mapas dinámicos en el nivel raíz para indexar dinámicamente los campos en la colección según el typeSet llamado only_strings, que indexa campos de string en la colección con la opción de índice positions y con store configurado en false, lo que ahorra espacio en disco al no guardar los valores de campo u offsets de términos para resaltar query.

  • Indexa el campo awards como el tipo document y utiliza la opción dynamic con el only_numbers typeSet para indexar dinámicamente solo los subcampos numéricos en el documento awards. Esto significa que los subcampos numéricos wins y nominations están indexados, pero el subcampo de string text no lo está.

{
"mappings": {
"dynamic": {
"typeSet": "only_strings"
},
"fields": {
"awards": {
"type": "document",
"dynamic": {
"typeSet": "only_numbers"
}
}
}
},
"typeSets": [
{
"name": "only_numbers",
"types": [
{
"type": "number"
}
]
},
{
"name": "only_strings",
"types": [
{
"type": "string",
"store": false,
"indexOptions": "positions"
}
]
}
]
}

Mapea dinámicamente tipos de campos específicos, excepto los campos especificados.

La siguiente definición de índice:

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

    • Indexar automáticamente los campos de string como tipo token.

    • Indexa automáticamente los campos numéricos como el tipo number.

  • Excluir el campo plot de ser indexado.

{
"mappings": {
"dynamic": {
"typeSet": "indexedTypes"
},
"fields": {
"plot": []
}
},
"typeSets": [
{
"name": "indexedTypes",
"types": [
{
"type": "token"
},
{
"type": "number"
}
]
}
]
}

Las siguientes definiciones de índices de muestra demuestran cómo utilizar mapeos estáticos.

Desactiva los mapeos dinámicos y define campos individuales para la indexación.

La siguiente definición de índice:

  • Especifica la asignación de campos estáticos a nivel raíz (dynamic: false), lo que significa que los campos no especificados en mappings.fields no se indexan. La definición de índice incluye explícitamente los siguientes campos para la indexación:

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

      Los subcampos wins y nominations contienen datos numéricos y se indexan como el tipo number. nominations se indexa con la representación int64, lo que le permite admitir valores de enteros más grandes que el tipo por defecto number.

      El subcampo text contiene datos de string y se indexa como el tipo string usando el analizador lucene.english, que está optimizado para texto en inglés. El campo text también utiliza la opción ignoreAbove para ignorar cualquier string de más de 255 caracteres de longitud.

    • El campo title, que contiene datos de string y se indexa como tipo string, utilizando el analizador lucene.whitespace, el cual está optimizado para textos que contienen muchos espacios en blanco, como nombres de productos o títulos. El campo title utiliza la opción multi para especificar el analizador lucene.french como analizador secundario. Esto permite especificar { "value": "title", "multi": "frenchAnalyzer" } como el path en tus $search consultas para enfocar mejor los términos de consulta en francés.

    • El campo genres, que contiene un arreglo de cadenas de texto y está indexado como el tipo string. Por defecto, MongoDB Search indexa los elementos del arreglo utilizando el analizador lucene.standard. 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 se encuentran en un arreglo en la definición del índice.

{
"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": {
"frenchAnalyzer": {
"type": "string",
"analyzer": "lucene.french"
}
}
},
"genres": {
"type": "string"
}
}
}
}

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 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 contiene datos de tipo string y se indexa como el tipo string utilizando el lucene.whitespace analizador, que está optimizado para texto que contiene mucho espacio en blanco, como nombres o títulos de productos.

    • El campo awards, que es de tipo document y contiene tres subcampos. Los subcampos wins y nominations contienen datos numéricos, y el subcampo text contiene datos string. En lugar de establecer explícitamente el tipo de datos para cada campo anidado en el documento, la definición del índice permite el mapeo dinámico para todos los subcampos del documento. Esto indexa wins y nominations como el tipo number, y text como el tipo string. Los datos en el campo text se indexan utilizando el analizador lucene.standard por defecto.

    {
    "mappings": {
    "dynamic": false,
    "fields": {
    "title": {
    "type": "string",
    "analyzer": "lucene.whitespace"
    },
    "awards": {
    "type": "document",
    "dynamic": true
    }
    }
    }
    }

Establece asignaciones estáticas en el nivel raíz y asigna dinámicamente un campo anidado utilizando una definición personalizada de typeSet.

Esta definición de índice:

  • Especifica mapeos estáticos de campos en el nivel raíz (dynamic: false), lo que significa que los campos que no están especificados en la opción mappings.fields no se indexan.

  • Define mapeos dinámicos para el campo awards, que es de tipo document, usando el typeSet personalizado llamado movieAwards. El campo awards tiene tres subcampos incorporados: wins, nominations y text. En lugar de indexar automáticamente los subcampos configurando dynamic a true en el nivel raíz o indexando explícitamente cada campo anidado usando mapeos estáticos, la definición de índice configura mapeos dinámicos para el tipo de campo document usando la definición typeSet denominada movieAwards. La movieAwards typeSet hace lo siguiente:

    • Indexa los campos de string como el tipo string utilizando la opción multi para especificar varios analizadores: lucene.english y lucene.french.

    • Indexa campos numéricos como tipo number usando la configuración por defecto para el tipo number.

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