Nota
Esta página describe las funciones de consulta de texto para implementaciones autogestionadas (no Atlas). Para los datos alojados en MongoDB Atlas, MongoDB ofrece una solución mejorada de consulta de texto completo, Atlas Search, y una solución de búsqueda vectorial, Atlas Vector Search.
Overview
Para ejecutar consultas de búsqueda de texto en implementaciones autogestionadas, debe tener un índice de texto en su colección. MongoDB proporciona índices de texto para admitir consultas de búsqueda de texto en contenido de cadena. Los índices de texto pueden incluir cualquier campo cuyo valor sea una cadena o un array de elementos de cadena. Una colección solo puede tener un índice de búsqueda de texto, pero este puede abarcar varios campos.
Compatibilidad
Puede utilizar índices de texto para implementaciones alojadas en MongoDB Atlas.
Para obtener más información sobre cómo administrar índices para implementaciones alojadas en MongoDB Atlas, consulte Crear, ver, eliminar y ocultar índices.
Versiones
El índice de texto está disponible en tres versiones. De forma predeterminada, MongoDB usa la versión 3 con nuevos índices de texto.
Para anular el valor predeterminado y utilizar una versión anterior, utilice el textIndexVersion
opción al crear el índice.
Crear índice de texto
Importante
Una colección puede tener como máximo un text índice.
Atlas Search (disponible en MongoDB Atlas) admite múltiples índices de búsqueda de texto completo en una sola colección. Para obtener más información, consulte la documentación de Atlas Search.
Para crear un índice text, utilice el
db.collection.createIndex() Método. Para indexar un campo que contiene una cadena o una matriz de elementos de cadena, incluya el campo y especifique el literal de cadena "text" en el documento de índice, como en el siguiente ejemplo:
db.reviews.createIndex( { comments: "text" } )
Puedes indexar varios campos para el índice text. El siguiente ejemplo crea un índice text en los campos subject y comments:
db.reviews.createIndex( { subject: "text", comments: "text" } )
Un índice compuesto puede incluir text claves de índice en combinación con claves de índice ascendentes/descendentes. Para obtener más información, consulta Índice compuesto.
Para eliminar un text índice, utilice el nombre del índice. Consulte "Usar el nombre del índice para eliminar un índice " para obtener más text información.
Especificar pesos
Para un text índice, el peso de un campo indexado denota la importancia del campo en relación con los otros campos indexados en términos de la puntuación de búsqueda de texto.
Para cada campo indexado del documento, MongoDB multiplica el número de coincidencias por el peso y suma los resultados. Con esta suma, MongoDB calcula la puntuación del documento. Consulte el $meta operador para obtener más información sobre la obtención y ordenación de puntuaciones de texto.
El peso predeterminado es 1 para los campos indexados. Para ajustar el peso de los campos indexados, incluya la weights opción en el db.collection.createIndex() método.
Para obtener más información sobre el uso de pesos para controlar los resultados de una búsqueda de texto, consulte Asignar pesos a los resultados de búsqueda de texto en implementaciones autoadministradas.
Índices de texto comodín
Nota
Los índices de texto comodín son distintos de los índices comodín. Estos últimos no admiten consultas con el $text operador.
Si bien los índices de texto comodín y los índices comodín comparten el $** patrón de campo comodín, son tipos de índice distintos. Solo los índices de texto comodín admiten el $text operador.
Al crear un índice text en varios campos, también puede usar el especificador comodín ($**). Con un índice de texto comodín, MongoDB indexa todos los campos que contienen datos de cadena para cada documento de la colección. El siguiente ejemplo crea un índice de texto usando el especificador comodín:
db.collection.createIndex( { "$**": "text" } )
Este índice permite la búsqueda de texto en todos los campos con contenido de cadena. Este índice puede ser útil con datos muy desestructurados si no está claro qué campos incluir en el índice de texto o para consultas ad hoc.
Los índices de texto comodín son text índices en varios campos. Por lo tanto, puede asignar ponderaciones a campos específicos durante la creación del índice para controlar la clasificación de los resultados. Para obtener más información sobre el uso de ponderaciones para controlar los resultados de una búsqueda de texto, consulte Asignar ponderaciones a los resultados de búsqueda de texto en implementaciones autogestionadas.
Los índices de texto comodín, como todos los índices de texto, pueden formar parte de índices compuestos. Por ejemplo, el siguiente ejemplo crea un índice compuesto en el campo a, así como en el especificador comodín:
db.collection.createIndex( { a: 1, "$**": "text" } )
Como ocurre con todos los índices de texto compuestos, dado que a precede a la clave del índice de texto, para realizar una búsqueda con este índice, el predicado de consulta debe incluir una condición de coincidencia $text de a igualdad. Para obtener información sobre los índices de texto compuestos, consulte Índices de texto compuestos.
Insensibilidad a las mayúsculas y minúsculas
El índice de la versión 3 text admite los casos C comunes, simples S y, para los idiomas turcos, los T casos especiales, tal como se especifica en la base de datos de caracteres Unicode.8.0 .
La corrección de mayúsculas y minúsculas amplía la insensibilidad a mayúsculas y minúsculas del índice text para incluir caracteres con diacríticos, como é y É, y caracteres de alfabetos no latinos, como "И" y "и" en el alfabeto cirílico.
La versión 3 del text índice tampoco distingue entre diacríticos. Por lo tanto, el índice tampoco distingue é Éentre,, e Ey.
Las versiones anteriores del índice text solo distinguen entre mayúsculas y minúsculas para [A-z]; es decir, solo distinguen entre mayúsculas y minúsculas para caracteres latinos no diacríticos. Para todos los demás caracteres, las versiones anteriores del índice de texto los tratan como distintos.
Insensibilidad a los diacríticos
Con la 3 versión, text el índice no distingue entre caracteres diacríticos y sus equivalentes sin marca,é êcomo,e y. Más específicamente, el text índice elimina los caracteres categorizados como diacríticos en Unicode.8 0 Lista de propiedades de la base de datos de caracteres.
La versión 3 del text índice tampoco distingue entre mayúsculas y minúsculas en caracteres con diacríticos. Por lo tanto, el índice tampoco distingue é Éentre,, e Ey.
Las versiones anteriores del índice text tratan los caracteres con diacríticos como distintos.
Delimitadores de tokenización
Para la tokenización, la versión 3 text del índice utiliza los delimitadores categorizados bajo Dash, Hyphen, Pattern_Syntax, Quotation_Mark, Terminal_Punctuation, y White_Space en la Lista de atributos de la base de datos de caracteres Unicode 8.0 .
Por ejemplo, si se proporciona una cadena "Il a dit qu'il «était le meilleur
joueur du monde»", el índice text trata a «, » y los espacios como delimitadores.
Las versiones anteriores del índice tratan « como parte del término "«était" y » como parte del término "monde»".
Entradas del índice
text El índice tokeniza y lematiza los términos en los campos indexados de las entradas de índice. text almacena una entrada de índice por cada término lematizado único en cada campo indexado de cada documento de la colección. El índice utiliza una lematización de sufijos simple,específica del idioma.
Idiomas admitidos y palabras vacías
MongoDB admite la búsqueda de texto en varios idiomas. Lostext índices eliminan las palabras vacías específicas del idioma (p. ej., enthe inglés,,,,, an aandetc.) y utilizan una lematización de sufijos específica del idioma. Para obtener una lista de los idiomas compatibles, consulte Idiomas de búsqueda de texto en implementaciones autogestionadas.
Si especificas un valor default_language de none, el índice de texto analiza cada palabra en el campo, incluidas las palabras irrelevantes, e ignora la lematización de sufijos.
Para especificar un idioma para el text índice, consulte Especificar el idioma predeterminado para un índice de texto en implementaciones autoadministradas.
sparse Propiedad
text los índices siempre son dispersos e ignoran la opción dispersa. Si a un documento le falta un campo de índice text (o el campo es null o es un arreglo vacío), MongoDB no agrega una entrada para el documento en el índice text. Para las inserciones, MongoDB inserta el documento pero no lo agrega al índice text.
En un índice compuesto que incluye una clave de índice text junto con claves de otros tipos, solo el campo de índice text determina si el índice hace referencia a un documento. Las demás claves no determinan si el índice hace referencia a los documentos.
Restricciones
Un índice de texto por colección
Una colección puede tener como máximo un text índice.
Atlas Search (disponible en MongoDB Atlas) admite múltiples índices de búsqueda de texto completo en una sola colección. Para obtener más información, consulte la documentación de Atlas Search.
Búsqueda de texto y sugerencias
Si un query incluye una expresión $text, no se puede usar hint() para especificar qué índice usar para el query.
Búsqueda de texto y frases
Si la string $search de una operación $text incluye una string de varias palabras y términos individuales, $text solo coincide con los documentos que incluyan la string de varias palabras.
Índice y ordenación de texto
Las operaciones de ordenamiento no pueden obtener el orden de ordenamiento de text un índice, ni siquiera de un índice de texto compuesto; es decir, las operaciones de ordenamiento no pueden utilizar el ordenamiento del índice de texto.
Índice compuesto
Un índice compuesto puede incluir una text clave de índice en combinación con claves de índice ascendentes/descendentes. Sin embargo, estos índices compuestos tienen las siguientes restricciones:
Un
textíndice compuesto no puede incluir ningún otro tipo de índice especial, como campos de índice multiclave o geoespaciales.Si el índice de texto compuesto incluye claves que preceden a la clave del índice de texto, para utilizar, el predicado
$textde consulta debe incluir condiciones de coincidencia de igualdad en las claves anteriores.Al crear un índice compuesto
text, todas las claves de índicetextdeben enumerarse de forma adyacente en el documento de especificación del índice.
Consulta también Índice de texto y orden para conocer limitaciones adicionales.
Para ver un ejemplo de un índice de texto compuesto, consulte Limitar el número de entradas de índice de texto escaneadas en implementaciones autoadministradas.
Soltar un índice de texto
Para descartar un text índice, pasa el nombre del índice al método db.collection.dropIndex(). Para obtener el nombre del índice, ejecuta el método db.collection.getIndexes().
Para obtener información sobre el esquema de nombres predeterminado para los text índices, así como sobre cómo anular el nombre predeterminado, consulte Especificar el nombre para text el índice.
Opción de intercalación
text los índices solo permiten la comparación binaria simple y no admiten intercalación.
Para crear un índice text en una colección que tiene una intercalación no simple, debe especificar explícitamente {collation: {locale: "simple"}
} al crear el índice.
Requisitos de almacenamiento y costos de rendimiento
text Los índices tienen los siguientes requisitos de almacenamiento y costos de rendimiento:
textlos índices pueden ser grandes. Contienen una entrada de índice para cada palabra única post-índice en cada campo indexado para cada documento insertado.Construir un índice
textes muy similar a construir un índice grande de múltiples claves y llevará más tiempo que construir un índice ordenado simple (escalar) sobre los mismos datos.Al crear un
textíndice grande en una colección existente, asegúrese de tener un límite suficientemente alto de descriptores de archivos abiertos. Consulte la configuración recomendada.textLos índices afectarán el rendimiento de inserción porque MongoDB debe agregar una entrada de índice para cada palabra post-raíz única en cada campo indexado de cada nuevo documento fuente.Además, los índices
textno almacenan frases ni información sobre la proximidad de las palabras en los documentos. Por lo tanto, las consultas de frases se ejecutarán con mucha mayor eficacia cuando toda la colección quepa en la RAM.
Soporte de búsqueda de texto
El índice text admite operaciones de consulta$text. Para ver ejemplos de búsqueda de texto, consulte$text reference page. Para ver ejemplos de operaciones$texten canales de agregación, consulte $text en el canal de agregación de implementaciones autogestionadas.