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
/ /
Búsqueda de texto
/ / /

Índices de texto en implementaciones autogestionadas

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.

Para ejecutar búsquedas de texto en implementaciones autoadministradas, debes tener un índice de texto en tu colección. MongoDB proporciona índices de texto para admitir consultas de búsqueda en contenido de string. Los índices de texto pueden incluir cualquier campo cuyo valor sea una string o un arreglo de elementos de string. Una colección solo puede tener un índice de búsqueda de texto, pero ese índice puede cubrir múltiples campos.

Puede usar índices de texto para implementaciones alojadas en MongoDB Atlas.

Para obtener más información sobre cómo administrar índices para las implementaciones alojadas en MongoDB Atlas, consulta Crear, ver, eliminar y ocultar índices.

El índice del texto está disponible en tres versiones. Por defecto, MongoDB utiliza la versión 3 con los nuevos índices de texto.

Para anular el valor predeterminado y utilizar una versión anterior, utilice el textIndexVersion opción cuando creas el índice.

Importante

Una colección puede tener como máximo un text índice.

Atlas Search (disponible en MongoDB Atlas) admite múltiples índices de texto completo en una sola colección. Para obtener más información, consulta la documentación de Atlas Search.

Para crear un índice text, utiliza 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 descartar un text índice, use el nombre del índice. Consulte Use el Nombre del Índice para descartar un índice text para obtener más información.

Para un índice text, 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 en el documento, MongoDB multiplica el número de coincidencias por el peso y suma los resultados. Usando esta suma, MongoDB luego calcula el puntaje para el documento. Consulta $meta operador para obtener detalles sobre cómo devolver y ordenar por puntuaciones de texto.

El peso por defecto es 1 para los campos indexados. Para ajustar los pesos de los campos indexados, incluye la opción weights en el método db.collection.createIndex().

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.

Nota

Los índices de texto de comodín son distintos de los índices de comodín. Los índices comodín no pueden admitir queries que usen el operador $text.

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 se puede usar el especificador comodín ($**). Con un índice de texto comodín, MongoDB indexa cada campo que contiene datos de tipo string para cada documento en 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 string. Este tipo de índice puede ser útil con datos altamente no estructurados si no está claro qué campos incluir en el índice de texto o para consultas ad-hoc.

Los índices de texto comodín son índices text sobre varios campos. Como tal, puedes asignar pesos 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 pesos para controlar los resultados de una búsqueda de texto, consulta Asignar pesos 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" } )

Al igual que con todos los índices de texto compuestos, ya que el a precede a la clave del índice de texto, para realizar una búsqueda $text con este índice, el predicado de la query debe incluir las condiciones de coincidencia exacta a. Para obtener información sobre los índices de texto compuestos, consulte Índices de texto compuestos.

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 .

Los case foldings amplían 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 "И" e "и" 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 distinguen entre mayúsculas y minúsculas solo para [A-z]; es decir, distinguen entre mayúsculas y minúsculas solo para caracteres latinos sin signos diacríticos. Para todos los demás caracteres, las versiones anteriores del índice de texto los tratan como distintos.

Con la versión 3, el índice text es insensible a los diacríticos. Es decir, el índice no diferencia entre caracteres que contienen signos diacríticos y su contraparte sin marca, como é, ê y e. Más específicamente, el índice text elimina los caracteres clasificados como diacríticos en Lista de Propiedades de la Base de Datos de Caracteres Unicode 8.0 .

La versión 3 del índice text también es insensible a mayúsculas y minúsculas para caracteres con diacríticos. Como tal, el índice tampoco distingue entre é, É, e y E.

Las versiones anteriores del índice text tratan los caracteres con diacríticos como distintos.

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 da la string "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 a « como parte del término "«était" y a » como parte del término "monde»".

text el índice tokeniza y lematiza los términos en los campos indexados para las entradas del índice. text índice almacena una entrada de índice por cada término con raíz única en cada campo indexado para cada documento de la colección. El índice utiliza un sencillo truncamiento de sufijos específico del lenguaje.

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.

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.

Para un índice compuesto que incluya 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 otras claves no determinan si el índice hace referencia a los documentos o no.

Una colección puede tener como máximo un text índice.

Atlas Search (disponible en MongoDB Atlas) admite múltiples índices de texto completo en una sola colección. Para obtener más información, consulta la documentación de Atlas Search.

Si un query incluye una expresión $text, no se puede usar hint() para especificar qué índice usar para el query.

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.

Las operaciones de ordenación no pueden obtener el orden de ordenación de un índice text, ni siquiera de un índice de texto compuesto; es decir, las operaciones de ordenación no pueden utilizar el orden en el índice de texto.

Un índice compuesto puede incluir una clave de índice text en combinación con claves de índice ascendentes/descendentes. Sin embargo, estos índices compuestos presentan las siguientes restricciones:

  • Un índice compuesto text no puede incluir ningún otro tipo de índice especial, como campos de índice multiclave o geoespacial.

  • Si el índice de texto compuesto incluye claves anteriores a la clave de índice de texto, para utilizar $text, el predicado de la consulta debe incluir condiciones de coincidencia exacta en las claves anteriores.

  • Al crear un índice compuesto text, todas las claves de índice text deben 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, consulta Limitar el número de entradas de índice de texto escaneadas en implementaciones autogestionadas.

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 conocer el esquema de nomenclatura por defecto de los índices text, así como la forma de sobrescribir el nombre por defecto, consulta Especificar nombre para índice text.

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 tenga una intercalación no simple, se debe especificar explícitamente {collation: {locale: "simple"} } al crear el índice.

text Los índices tienen los siguientes requisitos de almacenamiento y costos de rendimiento:

  • text los índices pueden ser grandes. Contienen una entrada de índice para cada palabra única post-índice en cada campo indexado para cada documento insertado.

  • Crear un índice text es muy similar a crear un índice multi-clave grande y tomará más tiempo que crear un índice ordenado simple (escalar) en los mismos datos.

  • Al construir un índice grande de text en una colección existente, asegúrate de tener un límite suficientemente alto de descriptores de archivos abiertos. Vea la configuración recomendada.

  • text los índices impactarán en el rendimiento de inserción porque MongoDB debe añadir una entrada de índice para cada palabra única posterior a la raíz en cada campo indexado de cada nuevo documento fuente.

  • Además, los text índices no almacenan frases ni información sobre la proximidad de palabras en los documentos. Como resultado, las consultas de frases se ejecutarán de manera mucho más efectiva cuando toda la colección quepa en RAM.

El índice text admite operaciones de query $text. Para ejemplos de búsqueda de texto, consulta el $text reference page. Para ver ejemplos de $text operaciones en pipelines de agregación, consulta $text en el pipeline de agregación en implementaciones autogestionadas.

Volver

lenguaje

En esta página