Skip to content

Latest commit

 

History

History
181 lines (102 loc) · 17.5 KB

File metadata and controls

181 lines (102 loc) · 17.5 KB

Índices de texto

Descripción general

MongoDB proporciona índices de texto para admitir consultas de búsqueda de texto sobre contenido de cadenas. textlos índices pueden incluir cualquier campo cuyo valor sea una cadena o una matriz de elementos de cadena.

Versiones

text Versión del índice Descripción
Versión 3 MongoDB presenta una versión 3 del textíndice. La versión 3 es la versión predeterminada de los textíndices creados en MongoDB 3.2 y posteriores.
Versión 2 MongoDB 2.6 presenta una versión 2 del textíndice. La versión 2 es la versión predeterminada de los textíndices creados en las series MongoDB 2.6 y 3.0.
Versión 1 MongoDB 2.4 presenta una versión 1 del textíndice. MongoDB 2.4 solo admite la versión 1.

Para anular la versión predeterminada y especificar una versión diferente, incluya la opción { "textIndexVersion": <version> }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 textíndice, use 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" } )

Puede indexar varios campos para el textíndice. El siguiente ejemplo crea un textíndice en los campos subjecty comments:

db.reviews.createIndex(
   {
     subject: "text",
     comments: "text"
   }
 )

Un índice compuesto puede incluir text claves de índice en combinación con claves de índice ascendente / descendente. Para obtener más información, consulte Índice compuesto .

Para eliminar un textíndice, use el nombre del índice. Consulte Usar el nombre del índice para eliminar un textíndice para obtener más 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 en el 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 al $meta operador para obtener detalles sobre la devolución y la clasificación por puntajes de texto.

El peso predeterminado es 1 para los campos indexados. Para ajustar los pesos de los campos indexados, incluya la weightsopción en el db.collection.createIndex()método.

Para obtener más información sobre el uso de ponderaciones para controlar los resultados de una búsqueda de texto, consulte Controlar los resultados de la búsqueda con ponderaciones .

Índices de texto comodín

NOTA: Los índices de texto comodín son distintos de los índices comodín . Los índices comodín no pueden admitir consultas mediante 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 índices distintos. Solo los índices de texto comodín admiten el $textoperador.

Al crear un textíndice en varios campos, también puede utilizar 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 utilizando el especificador comodín:

db.collection.createIndex( { "$**": "text" } )

Este índice permite la búsqueda de texto en todos los campos con contenido de cadena. Un índice de este tipo 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 de varios campos. Como tal, puede 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 ponderaciones para controlar los resultados de una búsqueda de texto, consulte Controlar los resultados de la búsqueda con ponderaciones .

Los índices de texto comodín, como con todos los índices de texto, pueden formar parte de índices compuestos. Por ejemplo, lo siguiente crea un índice compuesto en el campo a, así como el especificador comodín:

db.collection.createIndex( { a: 1, "$**": "text" } )

Al igual que con todos los índices de texto compuestos , dado que aprecede a la clave del índice de texto, para realizar una $textbúsqueda con este índice, el predicado de consulta debe incluir condiciones de coincidencia de igualdad a. Para obtener información sobre índices de texto compuesto, consulte Índices de texto compuesto .

Insensibilidad a minúsculas

Modificado en la versión 3.2 .

El textíndice de la versión 3 admite los idiomas comunes C, simples Sy para los idiomas turcos, los Tpliegues de casos especiales como se especifica en Pliegue de casos de base de datos de caracteres Unicode 8.0 .

El pliegue de mayúsculas y minúsculas expande la insensibilidad entre mayúsculas y minúsculas del text índice 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 también es insensible a los diacríticos . Como tal, el índice también no distingue entre é, É, e, y E.

Las versiones anteriores del textíndice no distinguen entre mayúsculas y minúsculas [A-z]solo para ; es decir, no distingue entre mayúsculas y minúsculas solo para caracteres latinos no diacríticos. Para todos los demás caracteres, las versiones anteriores del índice de texto los tratan como distintos.

Insensibilidad diacrítica

Modificado en la versión 3.2 .

Con la versión 3, el textíndice es insensible a los diacríticos. Es decir, el índice no distingue entre caracteres que contienen signos diacríticos y su homólogo no marcado, como por ejemplo é, êy e. Más específicamente, el textíndice elimina los caracteres categorizados como signos diacríticos en la lista de accesorios de la base de datos de caracteres Unicode 8.0 .

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

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

Delimitadores de tokenización

Modificado en la versión 3.2 .

Para tokenización, versión 3 textíndice utiliza los delimitadores categorizados bajo Dash, Hyphen, Pattern_Syntax, Quotation_Mark, Terminal_Punctuation, y White_Spaceen Unicode 8.0 Base de Datos de Carácter Lista Prop .

Por ejemplo, si se les da una cadena "Il a dit qu'il «était le meilleur joueur du monde»", las textgolosinas de índice «, »y espacios como delimitadores.

Las versiones anteriores del índice se tratan «como parte del término "«était"y »como parte del término "monde»".

Entradas de índice

textindex tokeniza y deriva los términos en los campos indexados para las entradas del índice. textindex almacena una entrada de índice para cada término derivado único en cada campo indexado para cada documento de la colección. El índice utiliza un sufijo simple específico del lenguaje .

Idiomas admitidos y palabras

MongoDB admite la búsqueda de texto en varios idiomas. textíndices caen las palabras vacías específicos del idioma (por ejemplo, en Inglés, the, an, a, and, etc.) y un uso simple sufijo específico del idioma derivada. Para obtener una lista de los idiomas admitidos, consulte Idiomas de búsqueda de texto .

Si especifica un valor de idioma de "none", entonces el textíndice usa una tokenización simple sin lista de palabras vacías ni derivación.

Para especificar un idioma para el textíndice, consulte Especificar un idioma para el índice de texto .

sparsePropiedad

textlos índices son siempre escasos e ignoran la opción escasa . Si un documento carece de un textcampo de índice (o el campo es nulluna matriz vacía), MongoDB no agrega una entrada para el documento al textíndice. Para inserciones, MongoDB inserta el documento pero no lo agrega al textíndice.

Para un índice compuesto que incluye una textclave de índice junto con claves de otros tipos, solo el textcampo de índice determina si el índice hace referencia a un documento. Las otras claves no determinan si el índice hace referencia a los documentos o no.

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

No puede usar hint()si la consulta incluye una $textexpresión de consulta.

Índice de texto y clasificación

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

Índice compuesto

Un índice compuesto puede incluir una text clave de índice en combinación con claves de índice ascendente / descendente. 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 geoespacial o de claves múltiples .
  • Si el textíndice compuesto incluye claves que preceden a la textclave de índice, para realizar una $textbúsqueda, el predicado de consulta debe incluir condiciones de coincidencia de igualdad en las claves anteriores.
  • Al crear un textíndice compuesto , todas las textclaves de índice deben enumerarse de forma adyacente en el documento de especificación del índice.

Consulte también Índice de texto y Ordenar para conocer las limitaciones adicionales.

Para ver un ejemplo de un índice de texto compuesto, consulte Limitar el número de entradas escaneadas .

Suelta un índice de texto

Para eliminar un textíndice, pase el nombre del índice al db.collection.dropIndex()método. Para obtener el nombre del índice, ejecute el db.collection.getIndexes()método.

Para obtener información sobre el esquema de nomenclatura predeterminado para los textíndices y sobre cómo anular el nombre predeterminado, consulte Especificar el nombre del textíndice .

Opción de clasificación

textlos índices solo admiten la comparación binaria simple y no admiten la intercalación .

Para crear un textíndice 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 post-raíz única en cada campo indexado para cada documento insertado.
  • La creación de un textíndice es muy similar a la creación de un gran índice de varias claves y llevará más tiempo que la creación de un índice simple ordenado (escalar) sobre los mismos datos.
  • Cuando cree un textíndice grande en una colección existente, asegúrese de tener un límite suficientemente alto para los descriptores de archivos abiertos. Consulte la configuración recomendada .
  • text Los índices afectarán el rendimiento de la inserción porque MongoDB debe agregar una entrada de índice para cada palabra post-derivada única en cada campo indexado de cada nuevo documento fuente.
  • Además, los textíndices no almacenan frases o 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 la RAM.

Soporte de búsqueda de texto

El textíndice admite $textoperaciones de consulta. Para ver ejemplos de búsqueda de texto, consulte $text reference page. Para ver ejemplos de $textoperaciones en canalizaciones de agregación, consulte Búsqueda de texto en la canalización de agregación .