Compartir vía


Búsqueda de texto completo en Azure Cosmos DB para NoSQL

Azure Cosmos DB para NoSQL ahora ofrece una eficaz característica de búsqueda de texto completo. Esto está diseñado para mejorar las funcionalidades de búsqueda nativas de las aplicaciones sin necesidad de un servicio de búsqueda externo para la búsqueda básica de texto completo.

La indexación y la búsqueda de texto completo incluyen técnicas avanzadas de procesamiento de texto, como lematización, eliminación de palabras irrelevantes y tokenización, lo que permite búsquedas de texto eficaces y eficaces a través de un índice de texto especializado. La búsqueda de texto completo también incluye puntuación de texto completo con una función que evalúa la relevancia de los documentos en una consulta de búsqueda determinada. BM25 o Mejor coincidencia 25, tiene en cuenta factores como la frecuencia del término, la frecuencia inversa del documento y la longitud del documento para puntuar y clasificar documentos. Esto ayuda a garantizar que los documentos más relevantes aparezcan en la parte superior de los resultados de búsqueda, mejorando la precisión y la utilidad de las búsquedas de texto.

La búsqueda de texto completo es ideal para varios escenarios, entre los que se incluyen:

  • Comercio electrónico: busca rápidamente productos basados en descripciones, revisiones y otros atributos de texto.
  • Administración de contenido: busque eficazmente artículos, blogs y documentos.
  • Soporte técnico al cliente: recupere incidencias de soporte técnico pertinentes, preguntas más frecuentes y artículos de knowledge base.
  • Contenido del usuario: analice y busque contenido generado por el usuario, como publicaciones y comentarios.
  • RAG para bots de chat: mejore las respuestas de bot de chat recuperando información relevante de grandes cuerpos de texto, mejorando la precisión y relevancia de las respuestas.
  • Aplicaciones de inteligencia artificial multiagente: habilite varios agentes de inteligencia artificial para buscar y analizar de forma colaborativa grandes cantidades de datos de texto, lo que proporciona información completa y matizadas.
  1. Configure un contenedor con una directiva de texto completo y un índice de texto completo.
  2. Inserte los datos con propiedades de texto.
  3. Ejecute consultas en los datos mediante funciones del sistema de búsqueda de texto completo.

Para usar las funcionalidades de búsqueda de texto completo, primero debe definir dos directivas:

  • Una directiva de texto completo de nivel de contenedor que define las rutas de acceso que contienen texto para las nuevas funciones del sistema de consulta de texto completo.
  • Índice de texto completo agregado a la directiva de indexación que permite una búsqueda eficaz.

Aunque es posible ejecutar consultas de búsqueda de texto completo sin estas directivas, no usarán el índice de texto completo y pueden consumir unidades de solicitud (RU) más altas y tener tiempos de ejecución más largos. Se recomienda encarecidamente definir directivas de índice y contenedor de texto completo.

Política de acceso a texto completo

Para cada propiedad de texto que desee configurar para la búsqueda de texto completo, debe declarar tanto path de la propiedad con texto y language del texto. Una directiva de texto completo simple puede ser:

{
   "defaultLanguage": "en-US",
   "fullTextPaths": [
       {
           "path": "/text",
           "language": "en-US"
       }
   ]
}

La definición de varias rutas de acceso de texto se realiza fácilmente agregando otro elemento a la matriz fullTextPaths:

{
   "defaultLanguage": "en-US",
   "fullTextPaths": [
       {
           "path": "/text1",
           "language": "en-US"
       },
       {
           "path": "/text2",
           "language": "en-US"
       }
   ]
}

Importante

Los caracteres comodín (*, []) no se admiten actualmente en la directiva de texto completo ni en el índice de texto completo.

Compatibilidad con varios idiomas (versión preliminar)

La compatibilidad con varios idiomas permite indexar y buscar texto en idiomas más allá del inglés. Aplica la tokenización, la lematización y la eliminación de palabras irrelevantes específicas del lenguaje para obtener resultados de búsqueda más precisos.

Importante

La compatibilidad con varios idiomas está en versión preliminar temprana y puede que no esté disponible en todas las regiones de Azure.

Nota

El rendimiento y la calidad de la búsqueda pueden ser diferentes de la búsqueda de texto completo en inglés. Por ejemplo, en este momento la eliminación de palabras irrelevantes solo está disponible para inglés (en-us). La funcionalidad está sujeta a cambios a través de la evolución de la versión preliminar. Para probarlo, debe inscribirse en la funcionalidad de nuevas características de búsqueda de texto completo a través de la sección Características del recurso de Azure Cosmos DB en el portal de Azure.

Los idiomas admitidos actualmente son:

  • en-US (Inglés)
  • de-DE (Alemán)
  • es-ES (Español)
  • fr-FR (Francés)
  • it-IT (Italiano)
  • pt-PT (Portugués)
  • pt-BR (Portugués brasileño)

Índice de texto completo

Las operaciones de búsqueda de texto completo deben usar un índice de texto completo. Un índice de texto completo se puede definir fácilmente en cualquier directiva de índice de Azure Cosmos DB para NoSQL según el ejemplo siguiente.

{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/\"_etag\"/?"
        },
    ],
    "fullTextIndexes": [
        {
            "path": "/text"
        }
    ]
}

Al igual que con las directivas de texto completo, los índices de texto completo se pueden definir en varias rutas de acceso.

{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/\"_etag\"/?"
        },
    ],
    "fullTextIndexes": [
        {
            "path": "/text"
        },
        {
            "path": "/text2"
        }
    ]
}

Consultas de búsqueda de texto completo

Las operaciones de búsqueda y puntuación de texto completo se realizan mediante las siguientes funciones del sistema en el lenguaje de consulta de Azure Cosmos DB para NoSQL.

  • FullTextContains: devuelve true si una cadena determinada está contenida en la propiedad especificada de un documento. Esto resulta útil en una cláusula WHERE cuando desea asegurarse de que las palabras clave específicas se incluyen en los documentos devueltos por la consulta.
  • FullTextContainsAll: devuelve true si todas las cadenas especificadas están contenidas en la propiedad especificada de un documento. Esto resulta útil en una cláusula WHERE cuando desea asegurarse de que se incluyen varias palabras clave en los documentos devueltos por la consulta.
  • FullTextContainsAny: devuelve true si alguna de las cadenas especificadas está contenida en la propiedad especificada de un documento. Esto resulta útil en una cláusula WHERE cuando desea asegurarse de que al menos una de las palabras clave se incluye en los documentos devueltos por la consulta.
  • FullTextScore: devuelve una puntuación. Esto solo se puede usar en una ORDER BY RANK cláusula, donde los documentos devueltos se ordenan por la clasificación de la puntuación de texto completo, con documentos más relevantes (puntuación más alta) en la parte superior y documentos menos relevantes (puntuación más baja) en la parte inferior.

Estos son algunos ejemplos de cada función en uso.

ContieneTextoCompleto

En este ejemplo, queremos obtener los primeros 10 resultados donde la frase red bicycle está contenida en la propiedad c.text.

SELECT TOP 10 *
FROM c
WHERE FullTextContains(c.text, "red bicycle")

TextoCompletoContieneTodo

En este ejemplo, queremos obtener los primeros 10 resultados en los que las palabras clave rojas y bicicletas están contenidas en la propiedad c.text, pero no necesariamente juntas.

SELECT TOP 10 *
FROM c
WHERE FullTextContainsAll(c.text, "red", "bicycle")

FullTextContainsAny

En este ejemplo, queremos obtener los primeros 10 resultados donde las palabras clave rojo y bicicleta o skateboard se encuentran en la propiedad c.text.

SELECT TOP 10 *
FROM c
WHERE FullTextContains(c.text, "red") AND FullTextContainsAny(c.text, "bicycle", "skateboard")

FullTextScore

En este ejemplo, queremos obtener los primeros 10 resultados en los que se incluyen las montañas y bicicletas , y se ordenan por orden de relevancia. Es decir, los documentos que tienen estos términos con más frecuencia deben aparecer más arriba en la lista.

SELECT TOP 10 *
FROM c
ORDER BY RANK FullTextScore(c.text, "bicycle", "mountain")

Importante

FullTextScore solo se puede usar en la cláusula ORDER BY RANK y no se proyecta en la instrucción SELECT o en una cláusula WHERE.

La búsqueda aproximada puede mejorar la resistencia a errores tipográficos y variaciones de texto. Puede especificar una distancia permitida (número de ediciones) entre el término de búsqueda y el texto del documento, lo que permite que las coincidencias cercanas se consideren un acierto. La distancia máxima que se puede especificar es 2 (dos ediciones).

Nota

La búsqueda aproximada está en versión preliminar anticipada. El rendimiento, la calidad y la funcionalidad están sujetos a cambios en la evolución de la versión preliminar. Para probarlo, debe inscribirse en la característica Nuevas características de búsqueda de texto completo a través de la sección Características del recurso de Azure Cosmos DB en Azure Portal.

La consulta de ejemplo siguiente recupera documentos donde el texto incluye palabras similares a rojas (dentro de una edición) y bycycle (en dos ediciones):

SELECT TOP 10 *
FROM c
WHERE FullTextContains(c.text, {"term": "red", "distance":1}) AND FullTextContains(c.text, {"term": "bycycle", "distance":2})