Ejecución o restablecimiento de indizadores, aptitudes o documentos

En Azure AI Search, hay varias maneras de ejecutar un indexador:

En este artículo se explica cómo ejecutar indexadores a petición, con y sin un restablecimiento. También describe la ejecución, la duración y la simultaneidad del indexador.

Cómo se conectan los indexadores a los recursos de Azure

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.

Ejecución de indizadores

Un servicio de búsqueda ejecuta un trabajo de indizador por unidad de búsqueda. Cada servicio de búsqueda comienza con una unidad de búsqueda, pero cada nueva partición o réplica aumenta las unidades de búsqueda del servicio. Puede comprobar el número de unidades de búsqueda en la sección Essential del portal en la página Información general. Si necesita procesamiento simultáneo, asegúrese de que tiene suficientes réplicas. Los indizadores no se ejecutan en segundo plano, por lo que es posible que detecte más limitación de consultas de lo habitual si el servicio está bajo presión.

En la captura de pantalla siguiente se muestra el número de unidades de búsqueda, que determina el número de indizadores que se pueden ejecutar a la vez.

Captura de pantalla de la sección esencial de la página de información general, en la que se muestran las unidades de búsqueda.

Una vez iniciada la ejecución del indizador, no se puede pausar ni detener. La ejecución del indizador se detiene cuando no hay más documentos para cargar o actualizar, o cuando se alcanza el límite máximo de tiempo de ejecución.

Puede ejecutar varios indizadores a la vez suponiendo que tenga capacidad suficiente, pero cada indizador es una sola instancia. Al iniciar una nueva instancia mientras el indexador ya está en ejecución, se produce este error: "Failed to run indexer "<indexer name>" error: "Another indexer invocation is currently in progress; concurrent invocations are not allowed."

Un trabajo de indexador se ejecuta en un entorno de ejecución administrado. Actualmente, hay dos entornos. No se puede controlar ni configurar qué entorno se usa. Búsqueda de Azure AI determina el entorno en función de la composición del trabajo y la capacidad del servicio para mover un trabajo de indizador a un procesador de contenido (algunas características de seguridad bloquean el entorno multiinquilino).

Los entornos de ejecución del indexador incluyen:

  • Un entorno de ejecución privado que se ejecuta en nodos de búsqueda, específicos del servicio de búsqueda.

  • Microsoft administra y protege un entorno de varios inquilinos con procesadores de contenido sin costo adicional. Este entorno se usa para descargar el procesamiento intensivo a nivel computacional, lo que permite que los recursos específicos del servicio estén disponibles para las operaciones rutinarias. Siempre que sea posible, la mayoría de los trabajos del indizador se ejecutan en el entorno multiinquilino.

Los límites del indexador varían para cada entorno:

Carga de trabajo Duración máxima Número máximo de trabajos Entorno de ejecución
Ejecución privada 24 horas Un trabajo de indexador por unidad de búsqueda1. La indexación no se ejecuta en segundo plano. En vez de ello, el servicio de búsqueda equilibrará todos los trabajos de indexación con las consultas y las acciones de administración de objetos en curso (como crear o actualizar índices). Al ejecutar indexadores, cabría esperar ver cierta latencia de consulta si los volúmenes de indexación son grandes.
Multiinquilino 2 horas 2 Indeterminado 3 Dado que el clúster de procesamiento de contenido es multiinquilino, se agregan nodos para satisfacer la demanda. Si experimenta un retraso en la ejecución a petición o programada, probablemente se deba a que el sistema está agregando nodos o esperando a que uno esté disponible.

1 Las unidades de búsqueda pueden ser combinaciones flexibles de particiones y réplicas, pero el número máximo de trabajos del indexador no está asociado ni a una ni a otra. En otras palabras, si tiene doce unidades, puede tener doce trabajos de indexador ejecutándose simultáneamente en una ejecución privada, independientemente de cómo se implementen las unidades de búsqueda.

2 Si se necesitan más de dos horas para procesar todos los datos, habilite la detección de cambios y programe el indexador para que se ejecute a intervalos de dos horas. Consulte Indexación de un conjunto de datos grande para obtener más estrategias.

3 "Indeterminado" significa que el límite no se cuantifica por el número de trabajos. Algunas cargas de trabajo, como el procesamiento de conjuntos de aptitudes, se pueden ejecutar en paralelo, lo que podría dar lugar a muchos trabajos aunque solo haya un indizador implicado. Aunque el entorno no impone restricciones, se siguen aplicando límites de indexador para el servicio de búsqueda.

Ejecución sin restablecimiento

Una operación de Run Indexer detectará y procesará solo aquello que sea necesario para sincronizar el índice de búsqueda con los cambios en el origen de datos subyacente. La indexación incremental comienza localizando un límite máximo interno para encontrar el documento de búsqueda actualizado por última vez, que se convierte en el punto de partida para la ejecución del indexador en documentos nuevos y actualizados del origen de datos.

La detección de cambios es esencial para determinar las novedades o las actualizaciones en el origen de datos. Los indexadores usan las funcionalidades de detección de cambios del origen de datos subyacente para determinar las novedades o actualizaciones del origen de datos.

  • Azure Storage incorpora detección de cambios gracias a su propiedad LastModified.

  • Otros orígenes de datos, como Azure SQL o Azure Cosmos DB, deben configurarse para la detección de cambios para que el indexador pueda leer filas nuevas y actualizadas.

Si el contenido subyacente no cambia, una operación de ejecución no tiene ningún efecto. En este caso, el historial de ejecución del indexador indicará 0\0 documentos procesados.

Deberá restablecer el indexador, como se explica en la sección siguiente, para volver a procesarlo.

Restablecimiento de indexadores

Después de la ejecución inicial, un indexador realiza un seguimiento de los documentos de búsqueda que se han indexado mediante un límite máximo interno. El marcador nunca se expone, aunque internamente el indizador sabe dónde se detuvo la última vez.

Si necesita recompilar un índice de forma total o parcial, puede borrar el límite máximo del indexador mediante un restablecimiento. Las API de restablecimiento están disponibles en niveles decrecientes en la jerarquía de objetos:

Después del restablecimiento, siga con un comando Ejecutar para volver a procesar documentos nuevos y existentes. Los documentos de búsqueda huérfanos que no tienen ningún homólogo en el origen de datos no se pueden quitar mediante el restablecimiento o la ejecución. Si necesita eliminar documentos, consulte Agregar, actualizar o eliminar documentos en su lugar.

Restablecimiento y ejecución de indexadores

El restablecimiento borra el límite máximo. Todos los documentos del índice de búsqueda se marcarán para la sobrescritura completa, sin actualizaciones insertadas ni combinación con el contenido existente. En el caso de los indexadores con un conjunto de aptitudes y almacenamiento en caché de enriquecimiento, el restablecimiento del índice también restablecerá implícitamente el conjunto de aptitudes.

El trabajo real se produce cuando se sigue un restablecimiento con un comando Ejecutar:

  • Todos los documentos nuevos encontrados en el origen subyacente se agregarán al índice de búsqueda.
  • Todos los documentos que existen en el origen de datos y el índice de búsqueda se sobrescribirán en el índice de búsqueda.
  • Cualquier contenido enriquecido creado a partir de conjuntos de aptitudes se volverá a generar. La caché de enriquecimiento, si está habilitada, se actualiza.

Como se indicó anteriormente, el restablecimiento es una operación pasiva: debe realizar un seguimiento de una solicitud de ejecución para volver a generar el índice.

Las operaciones de restablecimiento o ejecución se aplican a un índice de búsqueda o un almacén de conocimiento, a documentos o proyecciones específicos y a enriquecimientos almacenados en caché si un restablecimiento incluye explícita o implícitamente aptitudes.

El restablecimiento también se aplica a las operaciones de creación y de actualización. No desencadenará la eliminación ni la limpieza de documentos huérfanos en el índice de búsqueda. Para más información sobre la eliminación de documentos, consulte Agregar, actualizar o eliminar documentos.

Una vez que restablezca un indexador, no podrá deshacer la acción.

  1. Inicia sesión en Azure Portal y abre la página del servicio de búsqueda.

  2. En la página Información general, seleccione la pestaña Indexadores.

  3. Seleccione un indexador.

  4. Seleccione el comando Restablecer y, luego, elija para confirmar la acción.

  5. Actualice la página para mostrar el estado. Puede seleccionar el elemento para ver sus detalles.

  6. Seleccione Ejecutar para iniciar el procesamiento del indexador o espere a la siguiente ejecución programada.

    Captura de pantalla de la página del portal de ejecución del indizador, con el comando Reset resaltado.

Restablecimiento de aptitudes (versión preliminar)

En el caso de los indexadores que tienen conjuntos de aptitudes, puede restablecer las aptitudes individuales para forzar el procesamiento de solo esa aptitud y cualquier aptitud de nivel inferior que dependa de su salida. La caché de enriquecimiento, si la ha habilitado, también se actualiza.

Reset Skills solo es REST actualmente y está disponible mediante api-version=2020-06-30-Preview o versiones posteriores.

POST /skillsets/[skillset name]/resetskills?api-version=2020-06-30-Preview
{
    "skillNames" : [
        "#1",
        "#5",
        "#6"
    ]
}

Puede especificar aptitudes individuales, como se indica en el ejemplo anterior, pero si alguna de esas aptitudes requiere la salida de aptitudes que no están en la lista (n.º 2 a n.º 4), se ejecutarán estas últimas a menos que la memoria caché pueda proporcionar la información necesaria. Para que esto sea cierto, los enriquecimientos en caché para las aptitudes comprendidas entre la n.º 2 y la n.º 4 no deben depender de la n.º 1 (incluidas en la lista para el restablecimiento).

Si no se especifica ninguna aptitud, se ejecutará todo el conjunto de aptitudes y, si el almacenamiento en caché está habilitado, también se actualizará la memoria caché.

No olvide realizar un seguimiento con Run Indexer para invocar el procesamiento real.

Restablecimiento de documentos (versión preliminar)

La API Reset Documents acepta una lista de claves de documento para que pueda actualizar documentos específicos. Si se especifica, los parámetros de restablecimiento se convierten en el único factor determinante de lo que se procesa, independientemente de otros cambios en los datos subyacentes. Por ejemplo, si se agregaron o actualizaron 20 blobs desde la última vez que se ejecutó el indizador, pero solo se restablece un documento, solo se procesa ese documento.

En cada documento, todos los campos de ese documento de búsqueda se actualizan con los valores del origen de datos. No se pueden elegir los campos que se van a actualizar.

Si el documento se enriquece mediante un conjunto de aptitudes y tiene datos almacenados en caché, el conjunto de aptitudes se invoca solo para los documentos especificados y la caché se actualiza para los documentos reprocesados.

Al probar esta API por primera vez, las siguientes API le ayudan a validar y probar los comportamientos:

  1. Llame a Get Indexer Status con la versión de API api-version=2020-06-30-Preview o posterior, para comprobar el estado de restablecimiento y el estado de ejecución. Encontrará información sobre la solicitud de restablecimiento al final de la respuesta de estado.

  2. Llame a Reset Documents con la versión de API api-version=2020-06-30-Preview o posterior, para especificar los documentos que se procesarán.

    POST https://[service name].search.windows.net/indexers/[indexer name]/resetdocs?api-version=2020-06-30-Preview
    {
        "documentKeys" : [
            "1001",
            "4452"
        ]
    }
    
    • Las claves de documento proporcionadas en la solicitud son valores del índice de búsqueda, que pueden ser diferentes de los campos correspondientes del origen de datos. Si no está seguro del valor de clave, envíe una consulta para devolver el valor. Puede usar select para devolver solo el campo de clave de documento.

    • En el caso de los blobs que se analizan en varios documentos de búsqueda (donde parsingMode se establece en jsonLines o jsonArrays, o delimitedText), el indizador genera la clave de documento y es posible que no la conozca. En este escenario, se consulta la clave de documento para devolver el valor correcto.

  3. Llame a Run Indexer (cualquier versión de API) para procesar los documentos especificados. Solo se indexan esos documentos específicos.

  4. Llame a Run Indexer una segunda vez para procesar desde el último límite máximo.

  5. Llame a Search Documents para buscar valores actualizados y, también, para devolver claves de documento si no está seguro del valor. Use "select": "<field names>" si desea limitar los campos que aparecerán en la respuesta.

Sobrescritura de la lista de claves de documento

Al llamar a la API Reset Documents varias veces con claves diferentes, se anexan las nuevas claves a la lista de restablecimiento de claves de documento. Al llamar a la API con el parámetro overwrite establecido en true, se sobrescribirá la lista actual con la nueva:

POST https://[service name].search.windows.net/indexers/[indexer name]/resetdocs?api-version=2020-06-30-Preview
{
    "documentKeys" : [
        "200",
        "630"
    ],
    "overwrite": true
}

Comprobación del estado de restablecimiento "currentState"

Para comprobar el estado de restablecimiento y ver qué claves de documento se ponen en cola para su procesamiento, siga estos pasos.

  1. Llame a Get Indexer Status con api-version=06-30-2020-Preview o posterior.

    La API de versión preliminar devolverá la sección currentState, que se encuentra al final de la respuesta.

    "currentState": {
        "mode": "indexingResetDocs",
        "allDocsInitialTrackingState": "{\"LastFullEnumerationStartTime\":\"2021-02-06T19:02:07.0323764+00:00\",\"LastAttemptedEnumerationStartTime\":\"2021-02-06T19:02:07.0323764+00:00\",\"NameHighWaterMark\":null}",
        "allDocsFinalTrackingState": "{\"LastFullEnumerationStartTime\":\"2021-02-06T19:02:07.0323764+00:00\",\"LastAttemptedEnumerationStartTime\":\"2021-02-06T19:02:07.0323764+00:00\",\"NameHighWaterMark\":null}",
        "resetDocsInitialTrackingState": null,
        "resetDocsFinalTrackingState": null,
        "resetDocumentKeys": [
            "200",
            "630"
        ]
    }
    
  2. Compruebe el "modo":

    Para las aptitudes de restablecimiento, el "modo" será indexingAllDocs (dado que posiblemente se vean afectados todos los documentos en los campos que se rellenan a través del enriquecimiento con IA).

    En Reset Documents, el "modo" debe establecerse en indexingResetDocs. El indexador conserva este estado hasta que se procesan todas las claves de documento proporcionadas en la llamada de restablecimiento de documentos, tiempo durante el cual no se ejecutará ningún otro trabajo de indexador mientras la operación está en curso. Para buscar todos los documentos en la lista de claves de documento, es necesario descifrar cada documento para buscar y coincidir en la clave, lo que puede tardar unos minutos si el conjunto de datos es grande. Si un contenedor de blobs contiene centenares de blobs y los documentos que desea restablecer están al final, el indizador no encontrará los blobs coincidentes hasta que todos los demás se hayan comprobado primero.

  3. Una vez que se vuelvan a procesar los documentos, vuelva a ejecutar Get Indexer Status. El indexador regresa al modo indexingAllDocs y se procesarán los documentos nuevos o actualizados en la siguiente ejecución.

Pasos siguientes

Las API de restablecimiento se usan para determinar el ámbito de la siguiente ejecución del indizador. Para el procesamiento real, deberá invocar una ejecución de indizador a petición o permitir que un trabajo programado complete el trabajo. Una vez finalizada la ejecución, el indizador vuelve al procesamiento normal, ya sea según una programación o un procesamiento a petición.

Después de restablecer y volver a ejecutar los trabajos de indizador, puede supervisar el estado del servicio de búsqueda u obtener información detallada a través del registro de recurso.