Definición
Nuevo en la versión 7.0: (También disponible a partir de la versión 6.0.7)
Crea uno o más Índices de búsqueda de MongoDB o índices de búsqueda vectorial en una colección o vista específica.
El método mongosh db.collection.createSearchIndex() proporciona un contenedor alrededor del createSearchIndexes comando de base de datos.
Importante
Este comando solo se puede ejecutar en una implementación alojada en MongoDB Atlas.
Sintaxis
Sintaxis del comando:
db.runCommand( { createSearchIndexes: "<collection name>", indexes: [ { name: "<index name>", type: "<search index type>", definition: { /* search index definition fields */ } }, ... ] } )
Campos de comandos
El comando createSearchIndexes toma los siguientes campos:
Campo | Tipo | Necesidad | Descripción |
|---|---|---|---|
| string | Requerido | Nombre de la colección en la que se creará el índice de búsqueda. |
| arreglo | Requerido | Matriz de documentos que describen los índices a crear. |
| string | Opcional | Nombre del índice de búsqueda a crear. No se pueden crear varios índices con el mismo nombre en una sola colección. Si no especificas un |
| string | Opcional | Tipo de índice de búsqueda a crear. Puede especificar cualquiera:
Si omite el campo |
| Documento | Requerido | Documento que describe el índice que se creará. La sintaxis |
Sintaxis de definición del índice de búsqueda
La definición del índice de búsqueda toma los siguientes campos:
{ analyzer: "<analyzer-for-index>", searchAnalyzer: "<analyzer-for-query>", mappings: { dynamic: <boolean>, fields: { <field-definition> } }, analyzers: [ <custom-analyzer> ], storedSource: <boolean> | { <stored-source-definition> }, synonyms: [ { name: "<synonym-mapping-name>", source: { collection: "<source-collection-name>" }, analyzer: "<synonym-mapping-analyzer>" } ] }
Campo | Tipo | Necesidad | Descripción |
|---|---|---|---|
| string | Opcional | Especifica el analizador que se aplicará a los campos de cadena durante la indexación. Si omite este campo, el índice utiliza el analizador estándar. |
| string | Opcional | Especifica el analizador que se aplicará para consultar el texto antes de buscarlo. Si omite este campo, el índice utiliza el mismo analizador especificado en el campo Si omite |
| Objeto | Requerido | Especifica cómo indexar campos en diferentes rutas para este índice. |
| booleano | Opcional | Habilita o deshabilita la asignación dinámica de campos para este índice. Si Si se establece en Si se omite, es por defecto |
| Documento | Condicional | Obligatorio sólo si el mapeo dinámico está deshabilitado. Especifica los campos para indexar. Para obtener más información, consulte Definir mapeos de campos. |
| arreglo | Opcional | Especifica los analizadores personalizados que se utilizarán en este índice. |
| Definición de fuentebooleana o almacenada | Opcional | Especifica los campos del documento que se almacenarán para las consultas realizadas utilizando la opción returnsStoredSource. Puedes almacenar campos de todos los tipos de campos de búsqueda de MongoDB en MongoDB Search. El valor de
Si se omite, es por defecto Para obtener más información, consulta Definir campos fuente almacenados en tu MongoDB Search. |
| Matriz de definiciones de mapeo de sinónimos | Opcional | Especifica las asignaciones de sinónimos para usar en el índice. Configurar sinónimos permite indexar y buscar palabras con significados iguales o similares. Para obtener más información, consulte Definir asignaciones de sinónimos en su índice de búsqueda de MongoDB. |
Sintaxis de definición del índice de búsqueda de vectores
La definición del índice de búsqueda vectorial toma los siguientes campos:
{ "fields": [ { "type": "vector" | "filter", "path": "<field-to-index>", "numDimensions": <number-of-dimensions>, "similarity": "euclidean" | "cosine" | "dotProduct" } ] }
Para obtener explicaciones sobre los campos de definición del índice de búsqueda vectorial, consulte Cómo indexar campos para la búsqueda vectorial.
Comportamiento
El comando createSearchIndexes activa la creación de un índice. Puede haber un retraso entre la respuesta del comando y la preparación del índice.
Para ver el estado de sus índices de búsqueda, utilice la $listSearchIndexes etapa de agregación.
Control de acceso
Si su implementación aplica control de acceso, el usuario que ejecuta el createSearchIndexes comando debe tener el privilegio de acción en la base de datos o createSearchIndexes colección:
{ resource: { db : <database>, collection: <collection> }, actions: [ "createSearchIndexes" ] }
El rol integrado proporciona readWrite el createSearchIndexes privilegio. El siguiente ejemplo otorga a accountUser01 el readWrite rol en la products base de datos:
db.grantRolesToUser( "accountUser01", [ { role: "readWrite", db: "products" } ] )
Salida
La salida del comando createSearchIndexes se parece a lo siguiente:
{ ok: 1, indexesCreated: [ { id: "<index Id>", name: "<index name>" } ] }
Importante
El campo de respuesta ok: 1 indica que el comando se ejecutó correctamente. Sin embargo, puede haber un retraso entre la recepción de la respuesta y el momento en que los índices creados estén listos para su uso.
Para ver el estado de sus índices de búsqueda, utilice la $listSearchIndexes etapa de agregación.
Ejemplos
Crear un índice de búsqueda en todos los campos
El siguiente ejemplo crea un índice de búsqueda llamado searchIndex01 en la colección contacts:
db.runCommand( { createSearchIndexes: "contacts", indexes: [ { name: "searchIndex01", definition: { mappings: { dynamic: true } } } ] } )
La definición del mappings: { dynamic: true } índice especifica, lo que significa que el índice contiene todos los campos de la colección que tienen tipos de datos admitidos.
Crear un índice de búsqueda con un analizador de idiomas
Un analizador de lenguaje introduce palabras vacías, que son palabras que no son lo suficientemente significativas como para ser indexadas.
El siguiente ejemplo crea un índice de búsqueda llamado frenchIndex01 en la colección cars y especifica el analizador lucene.french en el campo fr:
db.runCommand( { createSearchIndexes: "cars", indexes: [ { name: "frenchIndex01", definition: { mappings: { fields: { subject: { fields: { fr: { analyzer: "lucene.french", type: "string" } }, type: "document" } } } } } ] } )
Para obtener más información sobre los analizadores de lenguaje, consulte Analizadores de lenguaje.
Crear múltiples índices de búsqueda
El siguiente comando crea dos índices de búsqueda en la colección products, searchIndex02 y searchIndex03:
db.runCommand( { createSearchIndexes: "products", indexes: [ { name: "searchIndex02", definition: { mappings: { fields: { title: { type: "string", analyzer: "lucene.simple" } } } } }, { name: "searchIndex03", definition: { mappings: { dynamic: true } } } ] } )
searchIndex02 Utiliza un analizador simple en el title campo. Este analizador divide el texto en términos de búsqueda según caracteres no alfabéticos, como espacios, signos de puntuación o dígitos.
searchIndex03 utiliza un mapeo de campos dinámico, lo que significa que el índice contiene todos los campos de la colección que tienen tipos de datos admitidos.
Crear un índice de búsqueda vectorial
El siguiente ejemplo crea un índice de búsqueda vectorial llamado vectorSearchIndex01 en la colección movies:
db.runCommand( { createSearchIndexes: "movies", indexes: [ { name: "vectorSearchIndex01", type: "vectorSearch", definition: { fields: [ { type: "vector", numDimensions: 1, path: "genre", similarity: "cosine" } ] } } ] } )
El índice de búsqueda vectorial contiene una dimensión e indexa el campo genre.