Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

createSearchIndexes (comando de base de datos)

createSearchIndexes

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 comando de base de datos createSearchIndexes.

Importante

Este comando solo se puede ejecutar en una implementación alojada en MongoDB Atlas.

Sintaxis del comando:

db.runCommand(
{
createSearchIndexes: "<collection name>",
indexes: [
{
name: "<index name>",
type: "<search index type>",
definition: {
/* search index definition fields */
}
},
...
]
}
)

El comando createSearchIndexes toma los siguientes campos:

Campo
Tipo
Necesidad
Descripción

createSearchIndexes

string

Requerido

Nombre de la colección sobre la que crear el índice de búsqueda.

indexes

arreglo

Requerido

Matriz de documentos que describen los índices a crear.

indexes.name

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 name, el índice se denomina default.

indexes.type

string

Opcional

Tipo de índice de búsqueda a crear. Puede especificar cualquiera:

  • search

  • vectorSearch

Si omites el campo type, el tipo de índice es search.

indexes.definition

Documento

Requerido

Documento que describe el índice a crear. La sintaxis de definition depende de si creas un índice de búsqueda estándar o un índice de Vector Search. Para la sintaxis definition, vea:

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

analyzer

string

Opcional

Especifica el analizador a aplicar a los campos de string durante la indexación.

Si omite este campo, el índice utiliza el analizador estándar.

searchAnalyzer

string

Opcional

Especifica el analizador que se debe aplicar al texto de la query antes de buscar en el texto.

Si omite este campo, el índice utiliza el mismo analizador especificado en el campo analyzer.

Si omites tanto los campos searchAnalyzer como analyzer, el índice usa el analizador estándar.

mappings

Objeto

Requerido

Especifica cómo indexar campos en diferentes rutas para este índice.

mappings.dynamic

booleano

Opcional

Habilita o deshabilita el mapeo dinámico de campos para este índice.

Si se configura en true, el índice contiene todos los campos que contienen tipos de datos admitidos.

Si se establece en false, debe especificar los campos individuales para indexar usando mappings.fields.

Si se omite, es por defecto false.

mappings.fields

Documento

Condicional

Requerido solo si el mapeo dinámico está deshabilitado.

Especifica los campos para indexar. Para obtener más información, consulte Definir mapeos de campos.

analyzers

arreglo

Opcional

Especifica los Analizadores personalizados que se deben usar en este índice.

storedSource

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 storedSource puede ser uno de estos:

  • true, para almacenar todos los campos

  • false, para no almacenar ningún campo

  • Un objeto que especifique los campos a include o exclude desde el almacenamiento

Si se omite, es por defecto false.

Para obtener más información, consulta Definir campos fuente almacenados en tu MongoDB Search.

synonyms

Opcional

Especifica asignaciones de sinónimos a utilizar en tu índice. Configurar sinónimos te permite indexar y buscar palabras que tengan el mismo o un significado similar.

Para obtener más información, consulte Definir asignaciones de sinónimos en su índice de búsqueda de MongoDB.

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, consulta Cómo indexar campos para búsquedas vectoriales.

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.

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

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.

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 índice especifica mappings: { dynamic: true }, lo que significa que el índice contiene todos los campos en la colección que tienen tipos de datos soportados.

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 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, consulta Analizadores de lenguaje.

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 usa un analizador simple en el campo title. El analizador simple divide el texto en términos que se pueden buscar según los caracteres que no son letras, como los espacios en blanco, la puntuación o los 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.

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.

Volver

Búsqueda de Atlas

En esta página