Búsqueda y consulta con índices de texto en Azure Cosmos DB for MongoDB de núcleo virtual
SE APLICA A: núcleo virtual de MongoDB
Una de las características clave que proporciona Azure Cosmos DB para el núcleo virtual de MongoDB es la indexación de texto, que permite realizar búsquedas y consultas eficaces de datos basados en texto. El servicio implementa índices de texto de la versión 2. La versión 2 admite la distinción entre mayúsculas y minúsculas, pero no la sensibilidad diacrítica.
Los índices de texto de Azure Cosmos DB for MongoDB son estructuras de datos especiales que optimizan las consultas basadas en texto, lo que las hace más rápidas y eficaces. Están diseñadas para manejar contenido textual como documentos, artículos, comentarios o cualquier otro tipo de datos con mucho texto. Los índices de texto usan técnicas como la tokenización, la lematización y las palabras irrelevantes para crear un índice que mejore el rendimiento de las búsquedas basadas en texto.
Requisitos previos
- Un clúster existente de núcleos virtuales de Azure Cosmos DB for MongoDB.
- Si no tiene una suscripción de Azure, cree una cuenta gratuita.
- Si tiene una suscripción de Azure existente, cree un clúster de núcleo virtual de Azure Cosmos DB for MongoDB.
Definición de un índice de texto
Para simplificar, consideremos el ejemplo de una aplicación de blog con la siguiente configuración:
- Nombre de base de datos:
cosmicworks
- Nombre de la colección:
products
En esta aplicación de ejemplo se almacenan artículos como documentos con la estructura siguiente:
{
"_id": ObjectId("617a34e7a867530bff1b2346"),
"title": "Azure Cosmos DB - A Game Changer",
"content": "Azure Cosmos DB is a globally distributed, multi-model database service.",
"author": "John Doe",
"category": "Technology",
"published": true
}
Use el método
createIndex
con la opcióntext
para crear un índice de texto en el campotitle
.use cosmicworks; db.products.createIndex({ title: "text" })
Nota:
Aunque solo se pueda definir un índice de texto por colección, Azure Cosmos DB for MongoDB núcleo virtual permite crear índices de texto en varios campos para poder realizar búsquedas de texto en diferentes campos de los documentos.
Opcionalmente, cree un índice para permitir la búsqueda en los campos
title
ycontent
.db.products.createIndex({ title: "text", content: "text" })
Configurar opciones de índice de texto
Los índices de texto de Azure Cosmos DB for MongoDB incluyen varias opciones para personalizar su comportamiento. Por ejemplo, puede especificar el idioma para el análisis de texto, establecer ponderaciones para priorizar determinados campos y configurar búsquedas que no distinguen mayúsculas de minúsculas. Este es un ejemplo de creación de un índice de texto con opciones:
Crear un índice para admitir la búsqueda en el
title
ycontent
los campos con soporte en inglés. Además, se ha asignado mayor peso al campotitle
para darle prioridad en los resultados de búsqueda.db.products.createIndex( { title: "text", content: "text" }, { default_language: "english", weights: { title: 10, content: 5 }, caseSensitive: false } )
Pesos en índices de texto
Al crear un índice de texto, puede asignar distintos pesos a los distintos campos del índice. Estas ponderaciones representan la importancia o relevancia de cada campo de la búsqueda. El núcleo virtual de Azure Cosmos DB for MongoDB calcula una puntuación y ponderaciones asignadas para cada documento en función de los términos de búsqueda al ejecutar una consulta de búsqueda de texto. La puntuación representa la relevancia del documento en la consulta de búsqueda.
Cree un índice para admitir la búsqueda en los campos
title
ycontent
. Asigna un peso de 2 al campo "título" y un peso de 1 al campo "contenido".db.products.createIndex( { title: "text", content: "text" }, { weights: { title: 2, content: 1 } } )
Nota:
Cuando un cliente realiza una consulta de búsqueda de texto con el término "Cosmos DB", la puntuación de cada documento de la colección se calculará en función de la presencia y frecuencia del término en los campos "título" y "contenido", con mayor importancia del campo "título" debido a su mayor peso.
Realizar una búsqueda de texto mediante un índice de texto
Una vez creado el índice de texto, puede realizar búsquedas de texto mediante el operador "text" en las consultas. El operador de texto toma una cadena de búsqueda y la compara con el índice de texto para buscar los documentos pertinentes.
Realice una búsqueda de texto para la frase
Cosmos DB
.db.products.find( { $text: { $search: "Cosmos DB" } } )
Opcionalmente, use el operador de proyección
$meta
junto con el campotextScore
en una consulta para ver el pesodb.products.find( { $text: { $search: "Cosmos DB" } }, { score: { $meta: "textScore" } } )
Anular un índice de texto
Para eliminar un índice de texto en MongoDB, puede usar el métododropIndex()
en la colección y especificar la clave del índice o el nombre del índice de texto que desea eliminar.
Quite un índice de texto especificando explícitamente la clave.
db.products.dropIndex({ title: "text" })
Opcionalmente, quite un índice de texto especificando el nombre único generado automáticamente.
db.products.dropIndex("title_text")
Limitaciones del índice de texto
- Solo se puede definir un índice de texto en una colección.
- Los índices de texto admiten búsquedas de texto sencillas y no ofrecen funciones de búsqueda avanzadas, como las búsquedas mediante expresiones regulares.
- Hint() no es compatible con una consulta que utilice la expresión $text.
- Las operaciones de ordenación no pueden usar el orden del índice de texto en MongoDB.
- Los índices de texto pueden ser relativamente grandes y consumir un espacio de almacenamiento significativo en comparación con otros tipos de índice.