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:
- Eliminación temporal de blobs nativos (versión preliminar), aplicable solo a Blob Storage
- Eliminación temporal con metadatos personalizados
La estrategia de detección de eliminación debe aplicarse desde la primera ejecución del indexador. Si no estableció la directiva de eliminación antes de la ejecución inicial, los documentos que se eliminaron antes de implementar la directiva permanecerán en el índice, incluso si agrega la directiva al indexador más adelante y la restablece. Si esto se ha producido, se recomienda crear un nuevo índice mediante un nuevo indexador, asegurándose de que la directiva de eliminación está en vigor desde el principio.
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.
Las claves de los documentos del índice deben asignarse a una propiedad de blob o a metadatos de blob (por ejemplo, "metadata_storage_path").
Para configurar la compatibilidad con la eliminación temporal, debe utilizar una API REST en versión preliminar como
2024-05-01-preview
o la configuración del origen de datos del indexador de Azure Portal.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 el Azure Portal o mediante una versión preliminar de la API de REST (2024-05-01-preview
). 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.
Inicie sesión en Azure Portal.
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.
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.
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.
Esta característica ya está disponible con carácter general.
Hay pasos que se deben seguir tanto en Azure Storage como en Azure AI Search, pero no hay otras dependencias de características.
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.
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 valortrue
:PUT https://[service name].search.windows.net/datasources/file-datasource?api-version=2024-07-01 { "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" } }
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.
Cambie
"softDeleteMarkerValue" : "false"
en el blob o archivo en Azure Storage.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.Ejecute el indexador.