Creación de un índice para varios idiomas en Azure AI Search

Si tiene cadenas en varios idiomas, puede adjuntar analizadores de idioma que las analicen mediante reglas lingüísticas de un idioma concreto durante la indización y la ejecución de consultas. Con un analizador de idioma, se manejan mejor las variaciones de caracteres, la puntuación y las formas de las raíces de las palabras.

Azure AI Search admite analizadores de Microsoft y Lucene. De forma predeterminada, el motor de búsqueda usa Standard Lucene, que es independiente del idioma. Si las pruebas indican que el analizador predeterminado no es suficiente, reemplácelo por un analizador de idioma.

En Azure AI Search, estos son los dos patrones para admitir varios idiomas:

  • Crear índices específicos del idioma en los que todo el contenido alfanumérico se encuentra en el mismo idioma y todos los campos de cadena que se pueden buscar se atribuyen para usar el mismo analizador de idioma.

  • Crear un índice combinado con versiones específicas del idioma de cada campo (por ejemplo, descripción_en, descripción_fr y descripción_ko) y, a continuación, restringir la búsqueda de texto completo a solo esos campos en el momento de la consulta. Este enfoque es útil en los escenarios en los que solo se necesitan variantes de idioma en algunos campos (por ejemplo, en una descripción).

Este artículo se centra en los procedimientos recomendados y en los pasos que hay que dar para definir y consultar campos específicos del idioma en un índice combinado:

  • Definir un campo de cadena para cada variante de idioma.
  • Establecer un analizador de idioma en cada campo.
  • En la solicitud de consulta, establezca el parámetro searchFields en campos específicos y, después, use select para devolver solo los campos que tienen contenido compatible.

Nota:

Si usa modelos de lenguaje grandes en un patrón de generación mejorada de recuperación (RAG), puede diseñar el mensaje para devolver cadenas traducidas. Ese escenario está fuera del ámbito de este artículo.

Requisitos previos

El análisis de idioma se aplica a los campos de tipo Edm.String que son searchable y que contienen texto localizado. Si también necesita la traducción de textos, consulte la sección siguiente para ver si el enriquecimiento con IA cubre sus necesidades.

Los campos que no son de cadena y los campos de cadena en los que no se puede buscar no se someten a análisis léxicos y no se tokenizan. En su lugar, se almacenan y se devuelven de forma textual.

Agregar la traducción de textos

En este artículo se supone que ya existen cadenas traducidas. Si no es así, puede adjuntar los servicios de Azure AI a una canalización de enriquecimiento, e invocar la traducción de texto durante la indización. La traducción de texto depende de la característica del indexador y de los servicios de Azure AI, pero toda la configuración se realiza en Azure AI Search.

Para agregar traducción de texto, siga estos pasos:

  1. Compruebe que el contenido está en un origen de datos compatible.

  2. Cree un origen de datos que apunte al contenido.

  3. Cree un conjunto de aptitudes que incluya la aptitud Traducción de texto.

    La aptitud Traducción de texto toma una sola cadena como entrada. Si tiene varios campos, puede crear un conjunto de aptitudes que llame a Traducción de texto varias veces, una por cada campo. O bien puede usar la aptitud Fusión de texto para combinar el contenido de varios campos en una cadena larga.

  4. Cree un índice que incluya campos de las cadenas traducidas. La mayoría de este artículo trata el diseño de índices y las definiciones de campo para indexar y consultar contenido de varios idiomas.

  5. Adjunte un recurso de servicios de Azure AI multirregional al conjunto de aptitudes.

  6. Cree y ejecute el indexador y aplique las instrucciones de este artículo para consultar solo los campos de interés.

Sugerencia

La traducción de texto está integrada en el Asistente de importación de datos. Si tiene un origen de datos compatible con texto que le gustaría traducir, puede recurrir al asistente para probar la funcionalidad de detección y traducción de idioma antes de escribir cualquier código.

Definición de campos para el contenido en distintos idiomas

En Azure AI Search, las consultas tienen como destino un índice único. Los desarrolladores que quieran proporcionar cadenas específicas del idioma en una única experiencia de búsqueda suele definen campos dedicados para almacenar los valores: un campo para las cadenas en inglés, otro para las de francés, etc.

La propiedad analyzer en una definición de campo se usa para establecer el analizador de idioma. Se usa para la indexación y la ejecución de la consulta.

{
  "name": "hotels-sample-index",
  "fields": [
    {
      "name": "Description",
      "type": "Edm.String",
      "retrievable": true,
      "searchable": true,
      "analyzer": "en.microsoft"
    },
    {
      "name": "Description_fr",
      "type": "Edm.String",
      "retrievable": true,
      "searchable": true,
      "analyzer": "fr.microsoft"
    }
  ]
}

Creación y carga de un índice

Un paso intermedio es compilar y llenar el índice antes de formular una consulta. Hemos mencionado este paso aquí para mayor integridad. Una forma de determinar la disponibilidad del índice es comprobar la lista de índices en el portal.

Restricción de la consulta y recorte de los resultados

Los parámetros de la consulta se usan para limitar la búsqueda a campos específicos y luego recortar los resultados de los campos que no resulten útiles para su escenario.

Parámetros Propósito
searchFields Limita la búsqueda de texto completo a la lista de campos con nombre.
select Recorta la respuesta para incluir solo los campos que especifique. De forma predeterminada, se devuelven todos los campos recuperables. El parámetro select le permite elegir cuáles devolver.

Si el objetivo es restringir la búsqueda a los campos que contienen cadenas en francés, usaría searchFields como destino de la consulta en los campos que contienen cadenas en ese idioma.

No es necesario especificar el analizador en una solicitud de consulta. La inclusión de un analizador de idioma en la definición del campo determina el análisis de texto durante la ejecución de la consulta. En el caso de las consultas que especifican varios campos, cada uno de los cuales invoca analizadores de idioma diferentes, los analizadores asignados a cada campo procesan simultáneamente los términos o las frases.

De forma predeterminada, una búsqueda devuelve todos los campos que están marcados como recuperables. Por lo tanto, puede que quiera excluir los campos que no se ajustan a la experiencia de búsqueda específica del idioma que desea proporcionar. En concreto, si limita la búsqueda a un campo con cadenas en francés, probablemente desee excluir los campos con cadenas en inglés de los resultados. El parámetro de consulta select le permite controlar los campos que se devuelven a la aplicación que realiza la llamada.

Ejemplo en REST

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2020-06-30
{
    "search": "animaux acceptés",
    "searchFields": "Tags, Description_fr",
    "select": "HotelName, Description_fr, Address/City, Address/StateProvince, Tags",
    "count": "true"
}

Ejemplo en C#

private static void RunQueries(SearchClient srchclient)
{
    SearchOptions options;
    SearchResults<Hotel> response;

    options = new SearchOptions()
    {
        IncludeTotalCount = true,
        Filter = "",
        OrderBy = { "" }
    };

    options.Select.Add("HotelId");
    options.Select.Add("HotelName");
    options.Select.Add("Description_fr");
    options.SearchFields.Add("Tags");
    options.SearchFields.Add("Description_fr");

    response = srchclient.Search<Hotel>("*", options);
    WriteDocuments(response);
}

Priorización de campos específicos del idioma

A veces se desconoce el idioma del agente que emite una consulta, en cuyo caso la consulta puede se emitir para todos los campos al mismo tiempo. Se puede definir una preferencia de resultados de IA en un determinado idioma mediante los perfiles de puntuación. En el ejemplo siguiente, las coincidencias encontradas en la descripción en francés tendrán una puntuación mayor que las de otros idiomas:

  "scoringProfiles": [
    {
      "name": "frenchFirst",
      "text": {
        "weights": { "description_fr": 2 }
      }
    }
  ]

A continuación, se incluye el perfil de puntuación en la solicitud de búsqueda:

POST /indexes/hotels/docs/search?api-version=2023-11-01
{
  "search": "pets allowed",
  "searchFields": "Tags, Description_fr",
  "select": "HotelName, Tags, Description_fr",
  "scoringProfile": "frenchFirst",
  "count": "true"
}

Pasos siguientes