Detección de cambios y eliminaciones mediante indexadores para Azure Storage en Azure AI Search

Después de crear un índice de búsqueda inicial, es posible que desee que los trabajos posteriores del indexador solo recojan documentos nuevos y modificados. En el caso del contenido indexado que se origina en Azure Storage, la detección de cambios se produce automáticamente porque los indexadores siguen la última actualización mediante las marcas de tiempo integradas en objetos y archivos de Azure Storage.

Aunque la detección de cambios es una obviedad, la detección de eliminaciones no lo es. Un indexador no realiza el seguimiento de la eliminación de objetos en orígenes de datos. Para evitar tener documentos de búsqueda huérfanos, puede implementar una estrategia de "eliminación temporal" que primero elimina los documentos de búsqueda y, después, realiza la eliminación física en Azure Storage como segundo paso.

Hay dos maneras de implementar una estrategia de eliminación temporal:

Requisitos previos

  • Use un indexador de Azure Storage para Blob Storage, Table Storage, File Storage o Data Lake Storage Gen2.

  • Use claves de documento y una estructura de archivos coherentes. El cambio de claves de documento o nombres de directorio y rutas de acceso (se aplica a ADLS Gen2) interrumpe la información de seguimiento interna que usan los indexadores para saber qué contenido se indexó y cuándo se indexó por última vez.

Nota:

ADLS Gen2 permite cambiar el nombre de los directorios. Cuando se cambia el nombre de un directorio, no se actualizan las marcas de tiempo de los blobs de ese directorio. Como resultado, el indexador no indexa de nuevo esos blobs. Si necesita que los blobs de un directorio se vuelvan a indexar después de cambiar el nombre de un directorio, ya que tienen nuevas direcciones URL, deberá actualizar la marca de tiempo LastModified de todos los blobs del directorio, de modo que el indexador sepa volver a indexarlos durante una futura ejecución. Los directorios virtuales de Azure Blob Storage no se pueden cambiar, por lo que no tienen este problema.

Eliminación temporal de blobs nativos

Para este enfoque de detección de eliminación, Azure AI Search depende de la característica de eliminación temporal de blobs nativos de Azure Blob Storage para determinar si los blobs han pasado a un estado de eliminación temporal. Cuando se detectan blobs en este estado, un indexador de búsqueda usa esta información para quitar el documento correspondiente del índice.

Requisitos para la eliminación temporal nativa

  • Los blobs deben estar en un contenedor de Azure Blob Storage. La directiva de eliminación temporal de blobs nativos de Azure AI Search no se admite para blobs en ADLS Gen2 o Azure Files.

  • Habilitación de la eliminación temporal para blobs.

  • Las claves de los documentos del índice deben asignarse a una propiedad de blob o a metadatos de blob (por ejemplo, "metadata_storage_path").

  • Debe usar la API REST (api-version=2023-11-01) o la versión más reciente, o la configuración del origen de datos del indexador en Azure Portal, para configurar la compatibilidad con la eliminación temporal.

  • El control de versiones de blobs no debe estar habilitado en la cuenta de almacenamiento. De lo contrario, la eliminación temporal nativa no será compatible con el diseño.

Configuración de la eliminación temporal nativa

En Blob Storage, al habilitar la eliminación temporal conforme a los requisitos, establezca la directiva de retención en un valor mucho mayor que la programación del intervalo del indexador. Si hay algún problema al ejecutar el indexador o si tiene un gran número de documentos para indexar, el indexador tendrá mucho tiempo para procesar los blobs eliminados temporalmente. Los indexadores de Azure AI Search solo eliminarán un documento del índice si procesa el blob mientras se encuentra en un estado de eliminación temporal.

En Azure AI Search, establece una directiva de detección de eliminación temporal de blobs nativos en el origen de datos. Puede hacerlo desde Azure Portal mediante la API REST (api-version=2023-11-01). En las instrucciones siguientes se explica cómo establecer la directiva de detección de eliminación en Azure Portal o por medio de las API REST.

  1. Inicie sesión en Azure Portal.

  2. En la página Información general del servicio Azure AI Search, ve a Nuevo origen de datos, un editor visual para especificar una definición de origen de datos.

    En la siguiente captura de pantalla se muestra donde se puede encontrar esta característica en el portal.

    Screenshot of data source configuration in Import Data wizard.

  3. En el formulario Nuevo origen de datos, rellene los campos necesarios, active la casilla Seguimiento de eliminaciones y elija Eliminación temporal de blobs nativos. Presione a continuación Guardar para habilitar la característica en la creación del origen de datos.

    Screenshot of portal data source native soft delete.

Reindexación de blobs recuperados con directivas de eliminación temporal nativas

Si restaura un blob eliminado temporalmente en Blob Storage, el indexador no siempre lo volverá a indexar. Esto se debe a que el indexador utiliza la marca de tiempo LastModified del blob para determinar si es necesaria la indexación. Cuando se recupera un blob de eliminación temporal, su marca de tiempo LastModified no se actualiza, por lo que, si el indexador ya ha procesado blobs con marcas de tiempo LastModified más recientes, no volverá a indexar el blob recuperado.

Para garantizar que un blob recuperado se vuelva a indexar, debe actualizar la marca de tiempo LastModified del blob. Una forma de hacerlo consiste en volver a guardar los metadatos de ese blob. No es necesario cambiar los metadatos, pero si vuelve a guardar estos, se actualizará la marca de tiempo LastModified del blob para que el indexador sepa que debe reindexarlos de nuevo.

Estrategia de eliminación temporal mediante metadatos personalizados

Este método usa los metadatos personalizados para indicar si un documento de búsqueda se debe eliminar del índice. Requiere dos acciones independientes: la eliminación del documento de búsqueda del índice, seguida de la eliminación de archivos en Azure Storage.

Hay pasos que se deben seguir tanto en Azure Storage como en Azure AI Search, pero no hay otras dependencias de características.

  1. En Azure Storage, agregue un par clave-valor de metadatos personalizados al archivo para indicar que el archivo está marcado para su eliminación. Por ejemplo, podría asignar un nombre a la propiedad "IsDeleted", establecida en false. Si desea eliminar el archivo, cámbielo a true.

  2. En Azure AI Search, edita la definición del origen de datos para incluir una propiedad "dataDeletionDetectionPolicy". Por ejemplo, la siguiente directiva considera que un archivo se va a eliminar si tiene una propiedad de metadatos IsDeleted con el valor true:

    PUT https://[service name].search.windows.net/datasources/file-datasource?api-version=2020-06-30
    {
        "name" : "file-datasource",
        "type" : "azurefile",
        "credentials" : { "connectionString" : "<your storage connection string>" },
        "container" : { "name" : "my-share", "query" : null },
        "dataDeletionDetectionPolicy" : {
            "@odata.type" :"#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",
            "softDeleteColumnName" : "IsDeleted",
            "softDeleteMarkerValue" : "true"
        }
    }
    
  3. Ejecute el indexador. Una vez que el indexador ha procesado el archivo y eliminado el documento del índice de búsqueda, puede eliminar el archivo físico en Azure Storage.

Reindexación de blobs y archivos recuperados

Puede revertir una eliminación temporal si el archivo de código fuente original todavía existe físicamente en Azure Storage.

  1. Cambie "softDeleteMarkerValue" : "false" en el blob o archivo en Azure Storage.

  2. Compruebe que la marca de tiempo LastModified del blob o el archivo sea más reciente que la de la última ejecución del indexador. Puede forzar una actualización a la fecha y hora actuales guardando de nuevo los metadatos.

  3. Ejecute el indexador.

Pasos siguientes