Comparteix a través de


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

En la Búsqueda de Azure AI, la función de escritura anticipada o de búsqueda mientras escribe se habilita 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 la función autocompletar y las coincidencias sugeridas. Estos campos se someten a una tokenización adicional, generando secuencias de prefijos para admitir coincidencias con términos parciales. Por ejemplo, un proveedor de sugerencias que incluye un campo de city con un valor para Seattle tiene combinaciones de prefijos de sea, seat, seatt, y seattl para admitir typeahead.

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.

El siguiente recorte de pantalla ilustra tanto lo uno como lo otro. Autocompletar anticipa un término potencial, terminando tw con en. Las sugerencias son mini resultados de búsqueda, donde un campo como hotel name representa un documento de búsqueda de hotel coincidente del índice. Para obtener sugerencias, puede mostrar cualquier campo que proporcione información descriptiva.

Captura de pantalla que muestra la comparación visual de autocompletar y las consultas sugeridas.

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 de autocompletar, mediante una de las API enumeradas en Usar un proveedor de sugerencias.

La búsqueda a medida que escribe está habilitada por cada 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 los documentos de colección de un índice específico y las respuestas se devuelven 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 durante la definición del campo que va a usarlo.

  • 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, 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 acortados, tendrá que volver a generar el índice si quiere agregarlos a un proveedor de sugerencias. Para más información, consulte Actualización o recompilación de un índice en Búsqueda de Azure AI.

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 ventaja de autocompletar es que tiene un grupo de campos mayor, ya que 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, por lo que seguramente quiera obtener los campos que mejor se representen como un resultado individual. Los nombres, títulos u otros campos únicos que distinguen entre varias coincidencias son los que mejor funcionan. Si los campos se componen de valores repetitivos, las sugerencias consistirán en resultados idénticos y el usuario no sabrá en cuál hacer clic.

Para satisfacer las experiencias de buscar mientras se escribe, agregue todos los campos que necesita para autocompletar y, después, use select, top, filter y searchFields para controlar los resultados de las sugerencias.

Elección de analizadores

La elección de un analizador determina el modo en que los campos se tokenizan y prefijan. Por ejemplo, para una cadena con guiones como contexto confidencial, el uso de un analizador de lenguaje da como resultado estas combinaciones de tokens: contexto, confidencial, contexto confidencial. 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. Esto permite que uno de los campos tenga un proveedor de sugerencias, mientras que el otro se puede configurar con una configuración de analizador personalizada.

Creación mediante Azure 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 para 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 de REST, agregue proveedores de sugerencias mediante Crear índice o Actualizar índice.

{
  "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 enumerado en Struct LexicalAnalyzerName Struct (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 incluyen 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 en todas las consultas, la operación se realiza con una colección de documentos de un índice y la consulta incluye un parámetro search, que en este caso proporciona la consulta parcial. En segundo lugar, debe agregar suggesterName a la solicitud. Si no se define un proveedor de sugerencias en el índice, se producirá un error en las llamadas a autocompletar o sugerencias.

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

Código de ejemplo

Para obtener información sobre cómo usar un paquete de sugerencias de código abierto para la finalización parcial de términos en la aplicación cliente, consulte Explorar el código de búsqueda de .NET.

Paso siguiente

Obtenga más información sobre la formulación de solicitudes.