Definición
Novedades en la versión 6.0.7.
Crea uno o más índices de búsqueda Atlas en una colección especificada.
El método mongosh db.collection.createSearchIndex() proporciona un contenedor alrededor del comando de base de datos createSearchIndexes.
Importante
Este comando solo se puede ejecutar en una implementación alojada en MongoDB Atlas y requiere un nivel de clúster de Atlas de al menos M10.
Sintaxis
Sintaxis del comando:
db.runCommand( { createSearchIndexes: "<collection name>", indexes: [ { name: "<index name>", 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 sobre la que crear el índice de búsqueda. |
| arreglo | Requerido | Arreglo de documentos que describen los índices que se deben crear. |
| string | Opcional | Nombre del índice de búsqueda que se va a crear. No puedes crear varios índices con el mismo nombre en una sola colección. Si no especificas un |
| Documento | Requerido | Documento que describe el índice a crear. Para obtener detalles sobre la sintaxis |
Sintaxis de la definición del índice de búsqueda
La definición del índice de búsqueda requiere 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 Aplicar a los campos de cadena al indexar. Si omite este campo, el índice utilizará el analizador estándar. |
| string | Opcional | Especifica el analizador que se aplicará al texto de la consulta antes de realizar la búsqueda. 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 el mapeo dinámico de campos para este índice. Si Si se establece en Si se omite, es por defecto |
| Documento | Condicional | Requerido solo si el mapeo dinámico está deshabilitado. Especifica los campos que se van a indexar. Para obtener más información, consulte fts-field-mappings. |
| arreglo | Opcional | Especifica los analizadores personalizados que se utilizarán en este índice. |
| booleano o definición de fuente almacenada | Opcional | Especifica los campos del documento que se almacenarán para las consultas realizadas mediante la opción returnedStoredSource. Puedes almacenar campos de todos los gráficos bson-data-chart en Atlas Search. El
Si se omite, es por defecto Para obtener más información, consulte fts-stored-source-definition. |
| Conjunto de definiciones de mapeo de sinónimos | Opcional | Especifica las asignaciones de sinónimos que se deben usar en su índice. La configuración de sinónimos permite indexar y buscar palabras que tengan el mismo o similar significado. Para obtener más información, consulte synonyms-ref. |
Comportamiento
El comando createSearchIndexes activa la creación de índices. Puede haber un retraso entre el momento en que se recibe una respuesta del comando y cuando el índice está listo.
Para ver el estado de tus índices de búsqueda, utiliza el etapa de agregación $listSearchIndexes.
Control de acceso
Si tu implementación aplica un control de acceso, el usuario que ejecute el comando createSearchIndexes debe tener la acción de privilegio createSearchIndexes en la base de datos o colección:
{ resource: { db : <database>, collection: <collection> }, actions: [ "createSearchIndexes" ] }
El rol readWrite incorporado otorga el privilegio de createSearchIndexes. El siguiente ejemplo otorga a accountUser01 el rol readWrite en la base de datos products:
db.grantRolesToUser( "accountUser01", [ { role: "readWrite", db: "products" } ] )
Salida
El resultado del comando createSearchIndexes se asemeja al siguiente:
{ ok: 1, indexesCreated: [ { id: "<index Id>", name: "<index name>" } ] }
Importante
El campo de respuesta ok: 1 indica que el comando fue exitoso. Sin embargo, puede haber un retraso entre el momento en que recibes la respuesta y cuando los índices creados están listos para su uso.
Para ver el estado de tus índices de búsqueda, utiliza el etapa de agregación $listSearchIndexes.
Ejemplos
Crea un índice de búsqueda en todos los campos
El siguiente ejemplo crea un índice de búsqueda denominado 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.
Crea un índice de búsqueda con un analizador de lenguaje
Un analizador de lenguaje introduce palabras vacías, que son aquellas 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 lucene.french analizador 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 ref-language-analyzers.
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 simple divide el texto en términos de búsqueda basados en caracteres que no son letras, como espacios en blanco, signos de puntuación o dígitos.
searchIndex03 Utiliza una asignación de campos dinámica, lo que significa que el índice contiene todos los campos de la colección que tienen tipos de datos compatibles.