Compartir a través de


Búsqueda y consulta con índices de texto en Azure DocumentDB

Una de las características clave que proporciona Azure DocumentDB es la indexación de texto, lo 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 DocumentDB 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ñados para controlar contenido textual como documentos, artículos, comentarios o cualquier otro tipo de datos con gran cantidad de 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.

Prerrequisitos

  • Una suscripción de Azure

  • Un clúster de Azure DocumentDB existente

Definición de un índice de texto

Para simplificar, consideremos un ejemplo de una aplicación de blog con la siguiente configuración:

  • Nombre de la 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 DocumentDB - A Game Changer",
  "content": "Azure DocumentDB is a globally distributed, multi-model database service.",
  "author": "John Doe",
  "category": "Technology",
  "published": true
}
  1. Use el createIndex método con la text opción para crear un índice de texto en el title campo.

    use cosmicworks;
    
    db.products.createIndex({ title: "text" })
    

    Nota:

    Aunque solo puede definir un índice de texto por colección, Azure DocumentDB le permite crear índices de texto en varios campos para permitirle realizar búsquedas de texto en distintos campos de los documentos.

  2. Opcionalmente, cree un índice para admitir la búsqueda en los title campos y content .

    db.products.createIndex({ title: "text", content: "text" })
    

Configuración de opciones de índice de texto

Los índices de texto de Azure DocumentDB 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:

  1. Cree un índice para admitir la búsqueda en los title campos y content con compatibilidad con el idioma inglés. Además, asigne pesos más altos al title campo para priorizarlo 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 diferentes pesos a campos individuales del índice. Estos pesos representan la importancia o relevancia de cada campo de la búsqueda. Azure DocumentDB 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.

  1. Cree un índice para admitir la búsqueda en los campos title y content. Asigne 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 "DocumentDB", 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 "title" y "content", con mayor importancia dada al campo "title" 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 coincide con el índice de texto para buscar documentos relevantes.

  1. Realice una búsqueda de texto para la frase DocumentDB.

    db.products.find(
        { $text: { $search: "DocumentDB" } }
    )
    
  2. Opcionalmente, use el operador de proyección $meta junto con el campo textScore en una consulta para ver el peso

    db.products.find(
        { $text: { $search: "DocumentDB" } },
        { score: { $meta: "textScore" } }
    )
    

Eliminación de un índice de texto

Para quitar un índice de texto en MongoDB, puede usar el dropIndex() método en la colección y especificar la clave de índice o el nombre del índice de texto que desea quitar.

  1. Quite un índice de texto especificando explícitamente la clave.

    db.products.dropIndex({ title: "text" })
    
  2. Quite un índice de texto especificando el nombre único generado automáticamente, opcionalmente.

    db.products.dropIndex("title_text")
    

Limitaciones del índice de texto

  • Solo se puede definir un índice de texto en una colección.
  • Hint() no se admite en combinación con una consulta mediante 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 espacio de almacenamiento significativo en comparación con otros tipos de índice.

Paso siguiente