Cómo quitar y recompilar un índice en Azure AI Search

En este artículo se explica cómo quitar y recompilar un índice de Azure AI Search. En él se explican las circunstancias en las que se requieren recompilaciones y se dan recomendaciones para mitigar el efecto de las recompilaciones en las solicitudes de consulta en curso. Si tiene que volver a generar con frecuencia, se recomienda usar alias de índice para facilitar el intercambio del índice al que apunta la aplicación.

Durante el desarrollo activo, es habitual quitar y volver a generar índices al iterar sobre el diseño de índices. La mayoría de los desarrolladores trabajan con una pequeña muestra representativa de sus datos para que la reindexación sea más rápida.

Modificaciones que requieren una recompilación

En la tabla siguiente se enumeran las modificaciones que requieren una anulación o recompilación de índices.

Acción Descripción
Eliminar un campo Para quitar físicamente todos los rastros de un campo, tendrá que recompilar el índice. Cuando una recompilación inmediata no es práctica, puede modificar el código de la aplicación para redirigir el acceso fuera de un campo obsoleto o usar los parámetros de consulta searchFields y select para elegir qué campos se buscan y devuelven. Físicamente, el contenido y la definición del campo permanecen en el índice hasta la próxima recompilación, cuando aplica un esquema que omite el campo en cuestión.
Cambiar la definición de un campo Las revisiones del nombre, el tipo de datos o los atributos de índice específicos (si se pueden buscar, filtrar, ordenar, clasificar) de un campo requiere una recompilación completa.
Asignar un analizador a un campo Los analizadores se definen en un índice, se asignan a campos y, a continuación, se invocan durante la indexación para informar sobre cómo se crean los tokens. Puede agregar una nueva definición de analizador a un índice en cualquier momento, pero solo puede asignar un analizador cuando se crea el campo. Esto es así tanto para la propiedad analyzer como para la propiedad indexAnalyzer. La propiedad searchAnalyzer es una excepción (puede asignar esta propiedad a un campo existente).
Actualizar o eliminar una definición de analizador en un índice No puede eliminar ni cambiar una configuración de analizador existente (analizador, tokenizador, filtro de token o filtro de caracteres) en el índice, a menos que recompile todo el índice.
Agregar un campo a un proveedor de sugerencias Si ya existe un campo y desea agregarlo a una construcción de proveedor de sugerencias, recompile el índice.
Cambiar los niveles No se admiten las actualizaciones locales. Si necesita más capacidad, cree otro servicio y recompilar los índices desde cero. Para ayudar a automatizar este proceso, puede usar el código de ejemplo index-backup-restore de este repositorio de ejemplo .NET de Azure AI Search. Esta aplicación hará una copia de seguridad del índice en una serie de archivos JSON y luego volverá a crear el índice en un servicio de búsqueda que especifique.

Modificaciones sin requisito de recompilación

Se pueden realizar muchas otras modificaciones sin que ello afecte a las estructuras físicas existentes. En concreto, los siguientes cambios no requieren una recompilación del índice. Para estos cambios, puede actualizar una definición de índice existente con los cambios.

  • Agregar un campo nuevo
  • Definición del atributo retrievable en un campo existente
  • Actualización de searchAnalyzer en un campo que tenga un elemento indexAnalyzer
  • Adición de una nueva definición de analizador en un índice (que se puede aplicar a nuevos campos)
  • Adición, actualización o eliminación de los perfiles de puntuación
  • Adición, actualización o eliminación de configuraciones CORS
  • Adición, actualización o eliminación de synonymMaps
  • Adición, actualización o eliminación de configuraciones semánticas

Cuando agrega un campo nuevo, a los documentos indexados existentes se les asigna un valor NULL para el campo nuevo. En una futura nueva indexación, valores provenientes de los datos de origen reemplazarán los valores NULL que agregó Azure AI Search. Para obtener más información sobre cómo actualizar el contenido de un índice, consulte Add, update, or delete documents in Azure Search (Agregar, actualizar o eliminar documentos en Azure Search).

Cómo recompilar un índice

Durante el desarrollo, el esquema de índice cambia con frecuencia. Puede planearlo mediante la creación de índices que se pueden eliminar, volver a crear y recargar rápidamente con un pequeño conjunto de datos representativo.

Para las aplicaciones ya en producción, se recomienda crear un nuevo índice que se ejecute en paralelo a un índice existente para evitar el tiempo de inactividad de la consulta. El código de aplicación proporciona redireccionamiento al nuevo índice.

  1. Compruebe si hay espacio. Los servicios de búsqueda están sujetos a un número máximo de índices, que varía según el nivel de servicio. Asegúrese de que tiene espacio para un segundo índice.

  2. Determine si es necesaria una recompilación. Si solo va a agregar campos o a cambiar alguna parte del índice que no esté relacionada con los campos, es posible que pueda actualizar la definición sin eliminarla, volver a crearla y a cargarla por completo.

  3. Obtenga una definición de índice, por si la necesita para futuras referencias.

  4. Elimine el índice existente, siempre que no esté ejecutando índices nuevos y antiguos en paralelo.

    Se quitan inmediatamente todas las consultas destinadas a ese índice. Recuerde que la eliminación de un índice es una acción irreversible, ya que se destruye el almacenamiento físico para la colección de campos y otras construcciones. Deténgase a pensar en las implicaciones antes de quitarlo.

  5. Cree un índice revisado, en el que el cuerpo de la solicitud incluya definiciones de campo modificadas o cambiadas.

  6. Cargue documentos en el índice desde un origen de datos externo.

Cuando se crea el índice, se asigna almacenamiento físico para cada campo en el esquema de índice, con un índice invertido que se crea para cada campo de búsqueda. Los campos que no pueden buscarse se pueden usar en filtros o expresiones, pero no cuentan con índices invertidos y no están habilitados para búsquedas de texto completo o aproximadas. En una recompilación de índices, se eliminan y vuelven a crear estos índices invertidos en función del esquema de índice proporcionado.

Al cargar el índice, el índice invertido de cada campo se rellena con todas las palabras únicas y con tokens de cada documento, con una asignación a los identificadores del documento correspondiente. Por ejemplo, al indizar un conjunto de datos de hoteles, el índice invertido creado para un campo Ciudad podría contener términos para Seattle, Portland y así sucesivamente. El identificador de documento de los documentos que incluyan Seattle o Portland en el campo Ciudad aparecerá junto con el término. En cualquier operación para agregar, actualizar o eliminar, los términos y la lista de identificadores de documento se actualizan en consecuencia.

Equilibrio de cargas de trabajo

La indexación no se ejecuta en segundo plano, pero el servicio de búsqueda equilibrará los trabajos de indexación con las consultas en curso. Durante la indexación, puede supervisar las solicitudes de consulta en el portal para asegurarse de que las consultas se completen puntualmente.

Si las cargas de trabajo de indexación presentan unos niveles inaceptables de latencia de consulta, realice un análisis de rendimiento y revise estas sugerencias de rendimiento para una posible mitigación.

Buscar actualizaciones

Puede empezar a consultar un índice en cuanto se carga el primer documento. Si conoce el identificador de un documento, la API REST para buscar documentos devuelve el documento específico. Para realizar pruebas más amplias, debe esperar hasta que el índice se haya cargado completamente y, a continuación, usar consultas para comprobar el contexto que espera ver.

Puede usar el explorador de búsqueda o un cliente REST para comprobar el contenido actualizado.

Si ha agregado un campo o le ha cambiado el nombre, use $select para volver a ese campo: search=*&$select=document-id,my-new-field,some-old-field&$count=true

Consulte también