Compartir a través de


Agregar navegación por facetas a los resultados de búsqueda

La navegación por facetas se usa para el filtrado autodirigido en los resultados de la consulta en una aplicación de búsqueda, donde la aplicación ofrece controles de formulario para determinar el ámbito de la búsqueda en grupos de documentos (por ejemplo, categorías o marcas) y Azure AI Search proporciona las estructuras de datos y filtros para respaldar la experiencia.

En este artículo, aprenderá los pasos para devolver una estructura de navegación por facetas en Azure AI Search. Una vez que esté familiarizado con los conceptos básicos y los clientes, continúe con los ejemplos de facetas para ver la sintaxis sobre varios casos de uso, como la faceta básica y los recuentos distintos.

Hay más funcionalidades de faceta disponibles a través de las API en versión preliminar:

  • estructuras de faceta jerárquica
  • filtrado de facetas
  • agregaciones de facetas

Los ejemplos de navegación por facetas proporcionan la sintaxis y el uso de las características en versión preliminar.

Navegación por facetas en una página de búsqueda

Las facetas son dinámicas porque se basan en cada conjunto de resultados de consulta específico. Una respuesta de búsqueda trae consigo todas los cubos de facetas utilizadas para navegar por los documentos en el resultado. Primero se ejecuta la consulta y luego se extraen las facetas de los resultados actuales y se ensamblan en una estructura de navegación por facetas.

En Búsqueda de Azure AI, las facetas son una capa profunda y no pueden ser jerárquicas a menos que use la API de versión preliminar. Si no está familiarizado con las estructuras de la navegación por facetas, en el ejemplo siguiente se muestra una a la izquierda. Los recuentos indican el número de coincidencias por cada faceta. El mismo documento se puede representar en varias facetas.

Captura de pantalla de resultados de búsqueda por facetas

Las facetas pueden ayudarle a encontrar lo que busca y le garantizan que obtendrá al menos un resultado. Como desarrollador, las facetas permiten exponer los criterios de búsqueda más útiles para navegar por el índice de búsqueda.

Navegación por facetas en el código

Las facetas están habilitadas en campos admitidos en un índice y, a continuación, se especifican en una consulta. La estructura de navegación por facetas se devuelve al principio de la respuesta, seguida de los resultados.

El siguiente ejemplo de REST es una consulta vacía ("search": "*") que tiene como ámbito todo el índice (consulte el ejemplo de hoteles integrados). El facets parámetro especifica el campo "Categoría".

POST https://{{service_name}}.search.windows.net/indexes/hotels/docs/search?api-version={{api_version}}
{
    "search": "*",
    "queryType": "simple",
    "select": "",
    "searchFields": "",
    "filter": "",
    "facets": [ "Category"], 
    "orderby": "",
    "count": true
}

La respuesta del ejemplo comienza con la estructura de navegación por facetas. La estructura consta de valores "Category" y un recuento de los hoteles para cada uno. Va seguido del resto de los resultados de la búsqueda, recortados aquí a solo un documento para mayor brevedad. Este ejemplo funciona bien por varias razones. El número de facetas de este campo se encuentra por debajo del límite (el valor predeterminado es 10), por lo que todas ellas aparecen y cada hotel del índice de 50 hoteles se representa exactamente en una de estas categorías.

{
    "@odata.context": "https://demo-search-svc.search.windows.net/indexes('hotels')/$metadata#docs(*)",
    "@odata.count": 50,
    "@search.facets": {
        "Category": [
            {
                "count": 13,
                "value": "Budget"
            },
            {
                "count": 12,
                "value": "Resort and Spa"
            },
            {
                "count": 9,
                "value": "Luxury"
            },
            {
                "count": 7,
                "value": "Boutique"
            },
            {
                "count": 5,
                "value": "Suite"
            },
            {
                "count": 4,
                "value": "Extended-Stay"
            }
        ]
    },
    "value": [
        {
            "@search.score": 1.0,
            "HotelId": "1",
            "HotelName": "Stay-Kay City Hotel",
            "Description": "The hotel is ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Time's Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities.",
            "Category": "Boutique",
            "Tags": [
                "pool",
                "air conditioning",
                "concierge"
            ],
            "ParkingIncluded": false,
        },
        . . . 
    ]
}

Habilitación de facetas en campos

Puede agregar facetas a nuevos campos que contengan texto sin formato o contenido numérico. Los tipos de datos admitidos incluyen cadenas, fechas, campos booleanos y campos numéricos (pero no vectores).

Puede usar Azure Portal, las API REST, los SDK de Azure o cualquier método que admita la creación o actualización de esquemas de índice en Azure AI Search. Como primer paso, identifique los campos que se van a usar para la faceta.

Elección de los campos a los que se va a asignar

Se pueden calcular facetas tanto para campos de valor único como para colecciones. Los campos que funcionan mejor en la navegación por facetas tienen estas características:

  • Contenido legible (no vectores) para humanos.
  • Cardinalidad baja (algunos valores distintos que se repiten a lo largo de los documentos en el corpus de búsqueda).
  • Valores descriptivos cortos (una o dos palabras) que se representan perfectamente en un árbol de navegación.

Los valores dentro de un campo, y no el propio nombre del campo, generan las facetas en una estructura de navegación por facetas. Si la faceta es un campo de cadena denominado Color, las facetas serán azules, verdes y cualquier otro valor de ese campo. Revise los valores de campo para asegurarse de que no hay errores tipográficos, valores NULL o diferencias de mayúsculas y minúsculas. Considere la posibilidad de asignar un normalizador a un campo filtrable y facetable para suavizar las variaciones menores en el texto. Por ejemplo, "Canadá", "CANADÁ" y "canadá" se normalizarían a un cubo.

Evitar campos no admitidos

No se pueden establecer facetas en campos existentes, en campos vectoriales o campos de tipo Edm.GeographyPoint o Collection(Edm.GeographyPoint).

En colecciones de campos complejos, "facetable" debe ser NULL.

Empezar con nuevas definiciones de campo

Los atributos que afectan a cómo se indexa un campo solo se pueden establecer cuando se crean campos. Esta restricción se aplica a facetas y filtros.

Si el índice ya existe, puede agregar una nueva definición de campo que proporcione facetas. Los documentos existentes en el índice obtienen un valor NULL para el nuevo campo. Este valor NULL se reemplaza la próxima vez que actualice el índice.

  1. En la página servicios de búsqueda de Azure Portal, vaya a la pestaña Campos del índice y seleccione Agregar campo.

  2. Proporcione un nombre, un tipo de datos y atributos. Se recomienda agregar filtrables porque es habitual establecer filtros basados en un cubo de facetas en la respuesta. Se recomienda ordenar porque los filtros generan resultados desordenados y es posible que quiera ordenarlos en la aplicación.

    También puede configurar un campo como buscable si desea admitir la búsqueda de texto completo en el campo y como recuperable si desea incluir el campo en la respuesta de búsqueda.

    Captura de pantalla de la página Agregar campos en Azure Portal.

  3. Guarde la definición del campo.

Devolver facetas en una consulta

Recuerde que las facetas se calculan dinámicamente a partir de resultados en una respuesta de consulta. Solo se obtienen facetas para los documentos encontrados por la consulta actual.

Use la vista JSON en el Explorador de búsqueda para establecer parámetros de faceta en Azure Portal.

  1. Seleccione un índice y abra el Explorador de búsqueda en la vista JSON.
  2. Proporcione una consulta en JSON. Puede escribirlo, copiar el JSON de un ejemplo de REST o usar intellisense para ayudar con la sintaxis. Consulte el ejemplo de REST en la pestaña siguiente para obtener referencia en expresiones de faceta.
  3. Seleccione Buscar para devolver resultados con facetas, articulados en JSON.

Esta es una captura de pantalla del ejemplo de consulta de faceta básica en el índice de ejemplo de hoteles. Puede pegar otros ejemplos de este artículo para devolver los resultados en el Explorador de búsqueda.

Captura de pantalla de la página Explorador de búsqueda en Azure Portal.

Procedimientos recomendados para trabajar con facetas

Esta sección es una colección de sugerencias y soluciones alternativas que son útiles para el desarrollo de aplicaciones.

Se recomienda C#: Agregar búsqueda a aplicaciones web como ejemplo de navegación por facetas que incluye código para la capa de presentación. El ejemplo también incluye filtros, sugerencias y autocompletar. Usa JavaScript y React para la capa de presentación.

Inicialización de una estructura de navegación por facetas con una cadena de búsqueda no calificada o vacía

Resulta útil inicializar una página de búsqueda con una consulta abierta ("search": "*") para rellenar completamente la estructura de navegación por facetas. Tan pronto como se pasen los términos de consulta en la solicitud, la estructura de navegación por facetas se limitará a solo las coincidencias en los resultados, en lugar de todo el índice. Esta práctica es útil para comprobar los comportamientos de faceta y filtro durante las pruebas. Si incluye criterios de coincidencia en la consulta, la respuesta excluye los documentos que no coinciden, lo que tiene el posible efecto descendente de excluir facetas.

Facetas claras

Al diseñar la experiencia del usuario, recuerde agregar un mecanismo para borrar facetas. Un enfoque común para borrar facetas es emitir una consulta abierta para restablecer la página.

Deshabilitar la faceta para ahorrar en el almacenamiento y mejorar el rendimiento

Para optimizar el rendimiento y el almacenamiento, establezca "facetable": false para los campos que nunca se deben usar como faceta. Algunos ejemplos incluyen campos de cadena para valores únicos, como un identificador o un nombre de producto, para evitar su uso accidental (e ineficaz) en la navegación por facetas. Este procedimiento recomendado es especialmente importante para la API REST, lo que permite filtros y facetas en campos de cadena de forma predeterminada.

Recuerde que no puede usar los campos Edm.GeographyPoint ni Collection(Edm.GeographyPoint) en la navegación por facetas. Recuerde que las facetas funcionan mejor en los campos con cardinalidad baja. Debido a cómo se resuelven las coordenadas geográficas, es raro que dos conjuntos de coordenadas sean iguales en un conjunto de datos determinado. Como tales, las facetas no se admiten en coordenadas geográficas. Debe usar un campo de ciudad o región para filtrar por ubicación.

Comprobación de datos incorrectos

A medida que prepare los datos para la indexación, compruebe los campos de valores NULL, errores ortográficos o discrepancias entre mayúsculas y minúsculas y versiones únicas y plurales de la misma palabra. De manera predeterminada, los filtros y facetas no se someten a análisis léxico ni a revisión ortográfica, lo que significa que todos los valores de un campo "facetable" son facetas en potencia, incluso si las palabras difieren en un carácter.

Los normalizadores pueden mitigar las discrepancias de datos, corrigiendo las diferencias entre mayúsculas y minúsculas y caracteres. De lo contrario, para inspeccionar los datos, puede comprobar los campos en su origen o ejecutar consultas que devuelvan valores del índice.

Un índice no es el mejor lugar para corregir valores NULL o valores no válidos. Debe corregir problemas de datos en el origen, suponiendo que sea una base de datos o un almacenamiento persistente, o en un paso de limpieza de datos que realice antes de la indexación.

Ordenar cubos de facetas

Aunque puede ordenar dentro de un cubo, no hay parámetros para controlar el orden de los cubos de facetas en la estructura de navegación como un todo. Si desea cubos de facetas en un orden específico, debe definirlo en el código de la aplicación.

Discrepancias en los recuentos de facetas

En determinadas circunstancias, es posible que los recuentos de facetas no sean totalmente precisos debido a la arquitectura de fragmentación. Cada índice de búsqueda está dividido en varias particiones, y cada una notifica las N primeras facetas por recuento de documentos, que después se combinan en un único resultado. Dado que solo es la N principales facetas de cada partición, es posible perder o contar con documentos coincidentes en la respuesta de faceta.

Para garantizar la precisión, puede inflar artificialmente el recuento: establezca <number> en un gran número para forzar la creación de informes completos de cada partición. Puede especificar "count": "0" para facetas ilimitadas. O bien, puede establecer "count" en un valor mayor o igual que el número de valores únicos del campo con facetas. Por ejemplo, si se enfrenta a un campo de "size" que tiene cinco valores únicos, puede establecer "count:5" para asegurarse de que todas las coincidencias se representan en la respuesta de faceta.

La desventaja de esta solución alternativa es una mayor latencia de consulta, por lo que úsela solo cuando sea necesario.

Conservar una estructura de navegación por facetas de forma asincrónica respecto a los resultados filtrados

En Azure AI Search, solo existen facetas para los resultados actuales. Sin embargo, es un requisito común de la aplicación conservar un conjunto estático de facetas para que el usuario pueda navegar en reversa, repasando pasos para explorar caminos alternativos a través del contenido de búsqueda.

Si desea un conjunto estático de facetas junto con una experiencia de exploración en profundidad dinámica, puede implementarlo mediante dos consultas filtradas: una con ámbito para los resultados, la otra que se usa para crear una lista estática de facetas con fines de navegación.

Desplazamiento de recuentos de facetas grandes a través de filtros

Los resultados de búsqueda y los resultados de faceta que son demasiado grandes se pueden recortar agregando filtros. En el ejemplo siguiente, en la consulta de informática en la nube, 254 elementos tienen una especificación interna como un tipo de contenido. Si los resultados son demasiado grandes, agregar filtros puede ayudar a los usuarios a refinar la consulta agregando más criterios.

Los elementos no son mutuamente excluyentes. Si un elemento cumple los criterios de ambos filtros, se contabiliza en cada uno de ellos. Esta duplicación es posible cuando se usan facetas en campos Collection(Edm.String), que suelen usarse para implementar el etiquetado de documentos.

Search term: "cloud computing"
Content type
   Internal specification (254)
   Video (10)

Pasos siguientes