Crear un indexador en Azure AI Search

Usar un indexador para automatizar la importación e indexación de datos en Azure AI Search. Un indexador es un objeto con nombre en un servicio de búsqueda que se conecta a un origen de datos externo de Azure, lee los datos y lo pasa a un motor de búsqueda para la indexación. El uso de indexadores reduce, si se está usando un origen de datos compatible, significativamente la cantidad y la complejidad del código que se debe escribir.

Los indizadores admiten dos flujos de trabajo:

  • Indexación basada en texto, extracción de cadenas y metadatos de contenido de texto para escenarios de búsqueda de texto completo.

  • Indexación basada en aptitudes, es decir, uso de aptitudes integradas o personalizadas que agregan aprendizaje automático integrado para el análisis de imágenes y grandes volúmenes de contenido no diferenciado, extrayendo o infiriendo el texto y la estructura. La indexación basada en aptitudes permite la búsqueda en contenido que no es fácil detectar mediante búsquedas de texto completo. Para obtener más información, consulta Enriquecimiento con IA en Azure AI Search.

Este artículo se centra en los pasos básicos de creación de un indexador. Según el origen de datos y el flujo de trabajo, puede ser necesaria una mayor configuración.

Requisitos previos

Patrones del indexador

Al crear un indexador, la definición es uno de estos dos patrones: indexación basada en texto o enriquecimiento con IA con aptitudes. Los patrones son los mismos, salvo por el hecho de que la indexación basada en aptitudes tiene más definiciones.

Ejemplo de indexador para la indexación basada en texto

La indexación basada en texto para la búsqueda de texto completo es el caso de uso principal de los indexadores y, para este flujo de trabajo, un indexador tendrá el aspecto que se muestra en este ejemplo.

{
  "name": (required) String that uniquely identifies the indexer,
  "description": (optional),
  "dataSourceName": (required) String indicating which existing data source to use,
  "targetIndexName": (required) String indicating which existing index to use,
  "parameters": {
    "batchSize": null,
    "maxFailedItems": 0,
    "maxFailedItemsPerBatch": 0,
    "base64EncodeKeys": false,
    "configuration": {}
  },
  "fieldMappings": (optional) unless field discrepancies need resolution,
  "disabled": null,
  "schedule": null,
  "encryptionKey": null
}

Los indizadores tienen los siguientes requisitos:

  • Una propiedad "name" que identifica de forma única al indexador en la colección de indexadores.
  • Una propiedad "dataSourceName" que apunta a un objeto de origen de datos. Especifica una conexión a datos externos.
  • Una propiedad "targetIndexName" que apunta al índice de búsqueda de destino.

Otros parámetros son opcionales y modifican comportamientos en tiempo de ejecución, como el número de errores que se aceptan antes de que se produzca un error en todo el trabajo. Los parámetros necesarios se especifican en todos los indexadores y se documentan en la referencia de la API de REST.

Los indexadores específicos del origen de datos para blobs, SQL y Azure Cosmos DB proporcionan parámetros "configuration" adicionales para comportamientos específicos del origen. Por ejemplo, si el origen es Blob Storage, puede establecer un parámetro que filtre por extensiones de archivo: "parameters" : { "configuration" : { "indexedFileNameExtensions" : ".pdf,.docx" } }. Si el origen es Azure SQL, puede establecer un parámetro de tiempo de espera de consulta.

Las asignaciones de campos sirven para asignar explícitamente campos de origen a destino cuando existen discrepancias de nombre o de tipo entre un campo del origen de datos y un campo en el índice de búsqueda.

De manera predeterminada, un indexador se ejecuta inmediatamente cuando lo crea en el servicio de búsqueda. Si no deseas ejecutar el indexador, establece "disabled" en true al crear el indexador.

También puede especificar una programación o establecer una clave de cifrado para el cifrado complementario de la definición del indexador.

Ejemplo de indexador para la indexación basada en aptitudes

Los indexadores también impulsan el enriquecimiento con IA. Se aplican todas las propiedades y los parámetros anteriores, pero las siguientes propiedades adicionales son específicas del enriquecimiento con IA: "skillSetName", "cache", "outputFieldMappings".

{
  "name": (required) String that uniquely identifies the indexer,
  "dataSourceName": (required) String, provides raw content that will be enriched,
  "targetIndexName": (required) String, name of an existing index,
  "skillsetName" : (required for AI enrichment) String, name of an existing skillset,
  "cache":  {
    "storageConnectionString" : (required if you enable the cache) Connection string to a blob container,
    "enableReprocessing": true
    },
  "parameters": { },
  "fieldMappings": (optional) Maps fields in the underlying data source to fields in an index,
  "outputFieldMappings" : (required) Maps skill outputs to fields in an index,
}

El enriquecimiento con IA tiene su propia área temática y está fuera del ámbito de este artículo. Para obtener más información, comienza con Enriquecimiento con IA, Conjuntos de aptitudes en Azure AI Search, Crear un conjunto de aptitudes, Asignar campos de salida de enriquecimiento y Habilitar el almacenamiento en caché para el enriquecimiento con IA.

Preparación de datos externos

Los indexadores funcionan con conjuntos de datos. Cuando se ejecuta un indexador, se conecta al origen de datos, recupera los datos del contenedor o carpeta y, opcionalmente, los serializa en JSON antes de pasarlos al motor de búsqueda para la indexación. En esta sección, se describen los requisitos de los datos entrantes para la indexación basada en texto.

Datos de origen Tareas
Documentos JSON Asegúrese de que la estructura o la forma de los datos entrantes se corresponda con el esquema del índice de búsqueda. La mayoría de los índices de búsqueda son bastante planos, es decir, la colección de campos consta de campos en el mismo nivel. Sin embargo, las estructuras jerárquicas o anidadas son posibles a través de campos y colecciones complejos.
Relacional Debes proporcionarlos como un conjunto de filas acopladas, donde cada fila se convierte en un documento de búsqueda completo o parcial en el índice.

Para acoplar los datos relacionales a un conjunto de filas, debe crear una vista SQL, o bien crear una consulta que devuelva los registros primarios y secundarios de la misma fila. Por ejemplo, el conjunto de datos del ejemplo de hoteles integrado es una base de datos SQL que tiene 50 registros (uno para cada hotel), vinculados a los registros de las habitaciones de una tabla relacionada. La consulta que acopla los datos colectivos a un conjunto de filas inserta toda la información de las habitaciones en los documentos JSON de cada registro del hotel. La información de las habitaciones insertada la genera una consulta que usa una cláusula FOR JSON AUTO.

Para más información sobre esta técnica, consulte el apartado Definición de una consulta que devuelve JSON insertado. Este es solo un ejemplo; puedes encontrar otros enfoques que producirán el mismo resultado.
Archivos Los indizadores generalmente crean un documento de búsqueda para cada archivo, donde el documento de búsqueda consta de campos para contenido y metadatos. En función del tipo de archivo, el indizador a veces puede analizar un archivo en varios documentos de búsqueda. Por ejemplo, en un archivo CSV, cada fila puede convertirse en un documento de búsqueda independiente.

Recuerda que solo es necesario extraer datos que se pueden buscar y filtrar:

  • Los datos que se pueden buscar son texto.
  • Los datos filtrables son alfanuméricos.

Azure AI Search no puede realizar búsquedas en datos binarios en ningún formato, pero puede extraer y deducir descripciones de texto de los archivos de imagen (consulta Enriquecimiento con IA) para crear contenido en el que se puedan realizar búsquedas. Del mismo modo, los modelos de lenguaje natural pueden analizar y desglosar textos grandes para buscar estructuras o información relevante, lo que genera contenido nuevo que se puede agregar a un documento de búsqueda.

Dado que los indexadores no solucionan problemas de datos, es posible que se necesiten otras formas de limpieza o manipulación de datos. Para más información, consulte la documentación del producto de Azure Database.

Preparación de un origen de datos

Los indizadores requieren un origen de datos que especifique el tipo, el contenedor y la conexión.

  1. Asegúrese de que usa un tipo de origen de datos compatible.

  2. Definición de Crear un origen de datos. La lista siguiente enumera algunos de los orígenes de datos que se usan con más frecuencia:

  3. Si el origen de datos es una base de datos, como Azure SQL o Cosmos DB, habilite el seguimiento de cambios. Azure Storage tiene un seguimiento de cambios integrado a través de la propiedad LastModified en cada blob, archivo y tabla. En los vínculos de arriba de los distintos orígenes de datos se explica qué métodos de seguimiento de cambios son compatibles con los indexadores.

Preparación de un índice

Los indizadores también requieren un índice de búsqueda. Recuerde que los indexadores pasan datos al motor de búsqueda para la indexación. Del mismo modo que los indexadores tienen propiedades que determinan el comportamiento de la ejecución, un esquema de índice tiene propiedades que influyen considerablemente en la forma en que se indexan las cadenas (solo se analizan y acortan las cadenas).

  1. Comience con Crear un índice de búsqueda.

  2. Configure la colección de campos y los atributos de campo.

    Los campos son los únicos receptores de contenido externo. En función de cómo se les asignen atributos en el esquema, los valores de cada campo se analizan, se tokenizan o se almacenan como cadenas textuales para filtros, búsqueda aproximada y consultas de escritura anticipada.

    Los indizadores pueden asignar automáticamente campos de origen a campos de índice de destino cuando los nombres y tipos son equivalentes. Si un campo no se puede asignar implícitamente, recuerde que puede definir una asignación de campos explícita que indique al indizador cómo enrutar el contenido.

  3. Revise las asignaciones del analizador en cada campo. Los analizadores pueden transformar cadenas. Por lo tanto, las cadenas indexadas pueden ser diferentes de las que ha pasado. Los efectos de los analizadores se pueden ver mediante Analizar texto (REST). Para más información acerca de los analizadores, consulte el artículo sobre analizadores para el procesamiento de texto.

Durante la indexación, un indizador solo comprueba los tipos y nombres de campo. No hay ningún paso de validación que asegure que el contenido entrante sea correcto para el campo de búsqueda correspondiente en el índice.

Creación de un indexador

Cuando estés listo para crear un indexador en un servicio de búsqueda remota, necesitarás un cliente de búsqueda. Un cliente de búsqueda puede ser Azure Portal, un cliente REST o código que cree instancias de un cliente de indizador. Se recomienda Azure Portal o las API REST para realizar las primeras pruebas de desarrollo y de prueba de concepto.

  1. Inicie sesión en Azure Portal.

  2. En la página Información general del servicio de búsqueda, elija entre dos opciones:

    • Asistente para la importación de datos. El asistente es único en el sentido de que crea todos los elementos necesarios. Otros enfoques requieren un origen de datos y un índice predefinidos.

    • Nuevo indizador, un editor visual para especificar una definición de indexador.

    En la siguiente captura de pantalla se muestra en qué parte del portal se pueden encontrar estas características.

    indexador de hoteles

Ejecución del indexador

De manera predeterminada, un indexador se ejecuta inmediatamente cuando lo crea en el servicio de búsqueda. Puedes invalidar este comportamiento estableciendo "disabled" en true en la definición del indexador. La ejecución del indexador es el momento de la verdad en el que averiguará si hay problemas con las conexiones, las asignaciones de campos o la construcción del conjunto de habilidades.

Hay varias maneras de ejecutar un indexador:

La ejecución programada normalmente se implementa cuando se necesita indexación incremental para que pueda elegir los cambios más recientes. Por lo tanto, la programación depende de la detección de cambios.

Los indexadores son uno de los pocos subsistemas que realizan llamadas salientes abiertas a otros recursos de Azure. En términos de roles de Azure, los indexadores no tienen identidades independientes: una conexión del motor de búsqueda a otro recurso de Azure se realiza mediante el sistema o la identidad administrada asignada por el usuario de un servicio de búsqueda. Si el indexador se conecta a un recurso de Azure en una red virtual, debe crear un vínculo privado compartido para esa conexión. Para obtener más información sobre las conexiones seguras, consulte la Seguridad en la Búsqueda de Azure AI.

Comprobar los resultados

Supervise el estado del indexador para comprobar el estado. Una ejecución correcta puede incluir advertencias y notificaciones. Asegúrese de comprobar las notificaciones de estado correctas y con errores para obtener más información sobre el trabajo.

Si quiere comprobar el contenido, puede ejecutar consultas en el índice rellenado que devuelven documentos completos o campos seleccionados.

Detección de cambios y estado interno

Si el origen de datos admite la detección de cambios, un indizador puede detectar cambios subyacentes en los datos y procesar solo documentos nuevos o actualizados en cada ejecución del indizador, dejando el contenido sin cambios tal y como está. Si el historial de ejecución del indizador indica que una ejecución se realizó correctamente con 0/0 documentos procesados, significa que el indizador no encontró filas o blobs nuevos o modificados en el origen de datos subyacente.

La lógica de detección de cambios está integrada en las plataformas de datos. La forma en que un indizador admite la detección de cambios varía según el origen de datos:

Los indexadores llevan un seguimiento del último documento que se procesó desde el origen de datos gracias a un valor de límite máximo interno. El marcador nunca se expone en la API, aunque internamente el indizador registra en dónde se detuvo. Cuando se reanuda la indexación, ya sea a través de una ejecución programada o una invocación a petición, el indizador consulta la marca de límite superior para continuar donde se quedó.

Si tiene que borrar ese valor de límite máximo para volver a realizar una indexación completa, puede usar la operación Restablecer indexador. Para realizar una nueva indexación más selectiva, use las operaciones Restablecer aptitudes o Restablecer documentos. A través de las API de restablecimiento, puede borrar el estado interno y vaciar la memoria caché si ha habilitado el enriquecimiento incremental. Para obtener más información sobre los antecedentes y la comparación de cada opción de restablecimiento, consulte Ejecución o restablecimiento de indizadores, aptitudes y documentos.

Pasos siguientes