Configuración de un proveedor de sugerencias para autocompletar y coincidencias sugeridas en una consulta

En Azure AI Search, typeahead (autocompletar) o "search as-you-type" está habilitado a través de un proveedor de sugerencias. Un proveedor de sugerencias es una configuración en un índice que especifica qué campos se deben usar para rellenar autocompletar y sugerencias. Estos campos se someten a una tokenización adicional, generando secuencias de prefijo para admitir coincidencias en términos parciales. Por ejemplo, un proveedor de sugerencias que incluya un campo Ciudad con un valor para "Seattle" tendrá las combinaciones de prefijos "sea", "seat", "seatt" y "seattl" para admitir la escritura anticipada.

Las coincidencias en términos parciales pueden ser una consulta autocompletada o una coincidencia sugerida. El mismo proveedor de sugerencias admite ambas experiencias.

Las opciones de escritura anticipada pueden ser autocompletar, que completa una entrada parcial para una consulta de un término completo, y sugerencias, que invita a hacer clic en una coincidencia concreta. Autocompletar genera una consulta. Las sugerencias producen un documento coincidente.

En la captura de pantalla siguiente se muestran ambos. Autocompletar anticipa un posible término, agregando a "met" la terminación "ro" por ejemplo. Las sugerencias son resultados de búsquedas en miniatura, donde un campo como el nombre de un hotel representa un documento de búsqueda de hoteles coincidentes del índice. Para obtener sugerencias, puede mostrar cualquier campo que proporcione información descriptiva.

Visual comparison of autocomplete and suggested queries

Puede utilizar estas características de forma conjunta o por separado. Para implementar estos comportamientos en Azure AI Search, hay un componente de consulta e índice.

  • Agregue un proveedor de sugerencias a una definición de índice de búsqueda. El resto de este artículo se centra en la creación de un proveedor de sugerencias.

  • Llame a una consulta habilitada para el proveedor de sugerencias, en forma de solicitud de sugerencia o solicitud autocompletar, mediante una de las API enumeradas en una sección posterior.

La búsqueda como tipo está habilitada por campo para los campos de cadena. Puede implementar ambos comportamientos de escritura automática dentro de la misma solución de búsqueda si desea una experiencia similar a la indicada en la captura de pantalla. Ambas solicitudes tienen como destino la colección de documentos de un índice específico y las respuestas después de que un usuario proporcione al menos una cadena de entrada de tres caracteres.

Creación de un proveedor de sugerencias

Para crear un proveedor de sugerencias, agregue uno a una definición de índice. Un proveedor de sugerencias obtiene un nombre y una colección de campos en los que está habilitada la experiencia de escritura anticipada. El mejor momento para crear un proveedor de sugerencias es cuando también se define el campo que lo usa.

  • Use solo campos de cadena.

  • Si el campo de cadena forma parte de un tipo complejo (por ejemplo, un campo Ciudad dentro de Dirección), incluya el elemento primario en la ruta de acceso del campo: "Address/City" (REST y C# y Python) o ["Address"]["City"] (JavaScript).

  • Use el analizador Lucene estándar predeterminado ("analyzer": null) o un analizador de idioma (por ejemplo, "analyzer": "en.Microsoft") en el campo.

Si intenta crear un proveedor de sugerencias mediante campos preexistentes, la API no la permite. Los prefijos se generan durante la indexación, cuando se tokenizan los términos parciales de dos o más combinaciones de caracteres junto con los términos completos. Dado que los campos existentes ya están tokenizados, debe volver a generar el índice si desea agregarlos a un proveedor de sugerencias. Para más información, consulte Cómo recompilar un índice de Azure AI Search.

Elegir los campos

Aunque los proveedores de sugerencias tienen varias propiedades, son principalmente una colección de campos de cadena para los que va a habilitar la experiencia de búsqueda mientras se escribe. Hay un proveedor de sugerencias para cada índice, por lo que la lista de proveedores de sugerencias debe incluir todos los campos que contribuyen al contenido tanto de las sugerencias como de autocompletar.

La función autocompletar se beneficia de un grupo de campos más grande del que se va a extraer porque el contenido adicional tiene más potencial de finalización de términos.

Por su parte, las sugerencias generan mejores resultados cuando la elección de campo es selectiva. Recuerde que la sugerencia es un proxy para un documento de búsqueda, así que elija campos que representen mejor un único resultado. Los nombres, títulos u otros campos únicos que distinguen entre varias coincidencias son los que mejor funcionan. Si los campos constan de valores repetitivos, las sugerencias constan de resultados idénticos y un usuario no sabrá cuál elegir.

Para satisfacer las experiencias de búsqueda como usuario, agregue todos los campos que necesita para autocompletar, pero después use select, top, filtery searchFields para controlar los resultados de las sugerencias.

Elección de analizadores

La elección de un analizador determina cómo se tokenizan y prefijo los campos. Por ejemplo, para una cadena con guiones como "contextual", el uso de un analizador de lenguaje da como resultado estas combinaciones de tokens: "context", "sensitive", "context-sensitive". Si usa el analizador de Lucene estándar, la cadena con guiones no existirá.

Al evaluar analizadores, considere la posibilidad de usar Analyze Text API para obtener información sobre cómo se procesan los términos. Una vez creado un índice, puede probar varios analizadores en una cadena para ver la salida de los tokens.

Los campos que usan analizadores personalizados o analizadores integrados (excepto lucene estándar) no se permiten explícitamente para evitar resultados deficientes.

Nota:

Si necesita solucionar la restricción del analizador, por ejemplo si necesita una palabra clave o un analizador de n-gramas para ciertos escenarios de consulta, debería usar dos campos independientes para el mismo contenido. De esta forma, uno de los campos tendrá un proveedor de sugerencias y el otro se puede configurar con una configuración de analizador personalizada.

Creación con el portal

Al usar el asistente para agregar un índice o para importar datos para crear un índice, tiene la opción de habilitar un proveedor de sugerencias:

  1. En la definición del índice, escriba un nombre para el proveedor de sugerencias.

  2. En cada definición de campo de los nuevos campos, active una casilla en la columna Proveedor de sugerencias. Solo los campos de cadena tienen disponible una casilla.

Como se indicó anteriormente, la elección del analizador afecta a la tokenización y al agregado de prefijos. Considere la definición de campo completa al habilitar los proveedores de sugerencias.

Creación mediante REST

En la API REST, puede agregar proveedores de sugerencias con Create Index o Update Index.

{
  "name": "hotels-sample-index",
  "fields": [
    . . .
        {
            "name": "HotelName",
            "type": "Edm.String",
            "facetable": false,
            "filterable": false,
            "key": false,
            "retrievable": true,
            "searchable": true,
            "sortable": false,
            "analyzer": "en.microsoft",
            "indexAnalyzer": null,
            "searchAnalyzer": null,
            "synonymMaps": [],
            "fields": []
        },
  ],
  "suggesters": [
    {
      "name": "sg",
      "searchMode": "analyzingInfixMatching",
      "sourceFields": ["HotelName"]
    }
  ],
  "scoringProfiles": [
    . . .
  ]
}

Creación mediante .NET

En C#, defina un objeto SearchSuggester. Suggesters es una colección de un objeto SearchIndex, pero solo puede tomar un elemento. Agregue un proveedor de sugerencias a la definición del índice.

private static void CreateIndex(string indexName, SearchIndexClient indexClient)
{
    FieldBuilder fieldBuilder = new FieldBuilder();
    var searchFields = fieldBuilder.Build(typeof(Hotel));

    var definition = new SearchIndex(indexName, searchFields);

    var suggester = new SearchSuggester("sg", new[] { "HotelName", "Category", "Address/City", "Address/StateProvince" });
    definition.Suggesters.Add(suggester);

    indexClient.CreateOrUpdateIndex(definition);
}

Referencia de propiedades

Propiedad Descripción
name Se especifica en la definición del proveedor de sugerencias, pero también se la llama en una solicitud Autocompletar o Sugerencias.
sourceFields Se especifica en la definición del proveedor de sugerencias. Es una lista de uno o más campos en el índice que son el origen del contenido para obtener sugerencias. Los campos deben ser de tipo Edm.String. Si se especifica un analizador en el campo, debe ser un analizador léxico con nombre de esta lista (no un analizador personalizado).

Como procedimiento recomendado, especifique solo los campos que se prestan a una respuesta adecuada y esperada, ya sea una cadena completa en una barra de búsqueda o una lista desplegable.

Un nombre de hotel es buen candidato porque tiene precisión. Los campos detallados, como las descripciones y los comentarios, son demasiado densos. De forma similar, los campos repetitivos, como las categorías y las etiquetas, son menos eficaces. En los ejemplos, se incluye "categoría" de todos modos para demostrar que puede incluir varios campos.
searchMode Parámetro solo de REST, pero también visible en el portal. Este parámetro no está disponible en el SDK de .NET. Indica la estrategia que se usa para buscar las frases candidatas. El único modo que se admite actualmente es analyzingInfixMatching, que actualmente coincide en el principio de un término.

Uso de un proveedor de sugerencias

El proveedor de sugerencias se utiliza en una consulta. Después de que se crea un proveedor de sugerencias, llame a una de los siguientes API para una experiencia de buscar mientras se escribe:

En una aplicación de búsqueda, el código de cliente debería usar una biblioteca como jQuery UI Autocomplete para recopilar la consulta parcial y ofrecer la coincidencia. Para más información acerca de esta tarea, consulte Incorporación de sugerencias o de la función de autocompletar al código de cliente.

El uso de la API se ilustra en la siguiente llamada a la API REST de autocompletar. De este ejemplo se pueden extraer dos conclusiones: En primer lugar, al igual que con todas las consultas, la operación se aplica a la colección de documentos de un índice y la consulta incluye un search parámetro, que en este caso proporciona la consulta parcial. En segundo lugar, debe agregar suggesterName a la solicitud. Si un proveedor de sugerencias no está definido en el índice, se producirá un error en las llamadas a autocompletar o sugerencias.

POST /indexes/myxboxgames/docs/autocomplete?search&api-version=2023-11-01
{
  "search": "minecraf",
  "suggesterName": "sg"
}

Código de ejemplo

Pasos siguientes

Más información sobre las solicitudes o la formulación.