Proyecciones de índices en Azure AI Search

Importante

Las proyecciones de índices están en versión preliminar pública según los términos de uso complementarios. Están disponible mediante Azure Portal, la versión 2023-10-01-Preview de la API REST, Azure Portal y las bibliotecas cliente beta que se han actualizado para incluir la característica.

Las proyecciones de índices son un componente de una definición de conjunto de aptitudes que define la forma de un índice secundario, que admite un patrón de índice de uno a varios, donde el contenido de una canalización de enriquecimiento puede tener como destino varios índices.

Las proyecciones de índices toman contenido enriquecido con IA generado por una canalización de enriquecimiento y lo indexan en un índice secundario (diferente del que tiene como destino un indizador de manera predeterminada) en el servicio de búsqueda. Las proyecciones de índices también permiten cambiar la forma de los datos antes de indexarlos, de manera que le permite separar de forma única una matriz de elementos enriquecidos en varios documentos de búsqueda en el índice de destino, lo que se conoce como indexación "uno a varios". La indexación "uno a varios" es útil para escenarios de fragmentación de datos, donde es posible que desee un índice principal para el contenido no fragmentado y un índice secundario para el fragmentado.

Si ha usado aptitudes cognitivas en el pasado, ya sabe que los conjuntos de aptitudes crean contenido enriquecido. Los conjuntos de aptitudes mueven un documento por una secuencia de enriquecimientos que invocan transformaciones atómicas, como el reconocimiento de entidades o la traducción de texto. De manera predeterminada, un documento procesado dentro de un conjunto de aptitudes se asigna a un único documento en el índice de búsqueda. Esto significa que si realiza la fragmentación de un texto de entrada y, a continuación, realiza enriquecimientos en cada fragmento, el resultado en el índice cuando se asigna mediante outputFieldMappings es una matriz de los enriquecimientos generados. Con las proyecciones de índices, se define un contexto en el que asignar cada fragmento de datos enriquecidos a su propio documento de búsqueda. Esto le permite aplicar una asignación de uno a varios de los datos enriquecidos de un documento al índice de búsqueda.

Definición de las proyecciones de índices

Las proyecciones de índice se definen dentro de una definición de conjunto de aptitudes y se definen principalmente como una matriz de selectores, donde cada selector corresponde a un índice de destino diferente en el servicio de búsqueda. Cada selector requiere los parámetros siguientes como parte de su definición:

  • targetIndexName: nombre del índice en el servicio de búsqueda en el que se indexan los datos de la proyección de índices.
  • parentKeyFieldName: nombre del campo en el índice de destino que contiene el valor de la clave del documento primario.
  • sourceContext: anotación de enriquecimiento que define la granularidad con la que se asignan los datos a documentos de búsqueda individuales. Para obtener más información, consulte Contexto de aptitud y lenguaje de anotación de entradas.
  • mappings: matriz de asignaciones de datos enriquecidos a campos del índice de búsqueda. Cada asignación consta de lo siguiente:
    • name: nombre del campo en el índice de búsqueda en el que se deben indexar los datos.
    • source: ruta de acceso de la anotación de enriquecimiento de la que se deben extraer los datos.

Cada elemento mapping también puede definir datos de forma recursiva con un campo opcional sourceContext y inputs, similar al almacén de conocimiento o la aptitud Conformador. Estos parámetros permiten dar forma a los datos que se van a indexar en campos de tipo Edm.ComplexType en el índice de búsqueda.

El índice definido en el parámetro targetIndexName tiene los siguientes requisitos:

  • Ya se debe haber creado en el servicio de búsqueda antes de crear el conjunto de aptitudes que contiene la definición de proyecciones de índices.
  • Debe contener un campo con el nombre definido en el parámetro parentKeyFieldName. Este campo debe ser de tipo Edm.String, no puede ser el campo de clave y debe tener el elemento filterable establecido en true.
  • El campo de clave debe tener el elemento searchable establecido en true y estar definido con el analizador keyword.
  • Debe tener campos definidos para cada uno de los elementos name definidos en mappings, ninguno de los cuales puede ser el campo de clave.

Esta es una carga de ejemplo para una definición de proyecciones de índices que puede usar para proyectar la salida de páginas individuales mediante la aptitud Dividir como sus propios documentos en el índice de búsqueda.

"indexProjections": {
    "selectors": [
        {
            "targetIndexName": "myTargetIndex",
            "parentKeyFieldName": "ParentKey",
            "sourceContext": "/document/pages/*",
            "mappings": [
                {
                    "name": "chunk",
                    "source": "/document/pages/*"
                }
            ]
        }
    ]
}

Control de documentos primarios

Dado que las proyecciones de índices generan efectivamente documentos "secundarios" para cada documento "primario" que se ejecuta mediante un conjunto de aptitudes, también tiene las siguientes opciones para controlar la indexación de los documentos "primarios".

  • Para mantener los documentos primarios y secundarios en índices independientes, basta con asegurarse de que el elemento targetIndexName de la definición del indizador sea diferente del elemento targetIndexName definido en el selector de la proyección de índices.

  • Para indexar documentos primarios y secundarios en el mismo índice, debe asegurarse de que el esquema del índice de destino funciona tanto con los elementos fieldMappings y outputFieldMappings definidos en la definición del indizador y el elemento mappings en el selector de la proyección de índices. A continuación, solo proporcionaría el mismo elemento targetIndexName para la definición del indizador y el selector de la proyección de índices.

  • Para ignorar los documentos primarios e indexar solo los documentos secundarios, debe proporcionar un elemento targetIndexName en la definición del indizador (basta con proporcionar el mismo que para el selector de la proyección de índices). A continuación, defina un objeto parameters independiente junto a la definición de selectors con una clave projectionMode establecida en skipIndexingParentDocuments, como se muestra aquí:

    "indexProjections": {
        "selectors": [
            ...
        ],
        "parameters": {
            "projectionMode": "skipIndexingParentDocuments"
        }
    }
    

Se puede usar la versión 2023-10-01-Preview de la API REST para crear proyecciones de índices mediante adiciones a un conjunto de aptitudes.

Ciclo de vida del contenido

Si el origen de datos del indizador admite el seguimiento de cambios y la detección de eliminación, el proceso de indexación puede sincronizar los índices principales y secundarios para recoger esos cambios.

Cada vez que se ejecutan el indexador y el conjunto de aptitudes, se actualizan las proyecciones de índices si el conjunto de aptitudes o los datos de origen subyacentes han cambiado. Los cambios que recoge el indizador se propagan a través del proceso de enriquecimiento a las proyecciones del índice, lo que garantiza que los datos proyectados sean una representación actual del contenido en el origen de datos de origen.

Nota:

Aunque puede editar manualmente los datos de los documentos proyectados mediante la API de inserción de índice, las modificaciones se sobrescribirán en la siguiente invocación de canalización, suponiendo que se actualice el documento de los datos de origen.

Valor de clave proyectado

Cada documento de la proyección de índices contiene una clave de identificación única que genera el indizador para garantizar la unicidad y permitir que el seguimiento de cambios y eliminaciones funcione correctamente. Esta clave contiene los siguientes segmentos:

  • Un código hash aleatorio para garantizar la unicidad. Este código hash cambia si se actualiza el documento primario entre ejecuciones del indizador.
  • Clave del documento primario.
  • Ruta de acceso de anotación de enriquecimiento que identifica el contexto desde el que se generó el documento.

Por ejemplo, si divide un documento primario con el valor de clave "123" en cuatro páginas y, a continuación, cada una de esas páginas se proyecta como su propio documento a través de proyecciones de índices, la clave de la tercera página del texto tendría un aspecto similar a "01f07abfe7ed_123_pages_2". Si el documento primario se actualiza para agregar una quinta página, la nueva clave de la tercera página podría ser, por ejemplo, "9d800bdacc0e_123_pages_2", ya que el valor hash aleatorio cambia entre ejecuciones de indizador aunque el resto de los datos de la proyección no haya cambiado.

Cambios o adiciones

Si se cambia un documento primario de modo que los datos de un documento de índice proyectado cambien (un ejemplo sería si se cambiara una palabra en una página determinada pero no se agregaran nuevas páginas netas), los datos del índice de destino para esa proyección específica se actualizan para reflejar ese cambio.

Si se cambia un documento primario de modo que haya nuevos documentos secundarios proyectados que no estuvieran allí antes (un ejemplo sería si se agregaran una o más páginas de texto al documento), esos nuevos documentos secundarios se agregarán la próxima vez que se ejecute el indizador.

En ambos casos, todos los documentos proyectados se actualizan para tener un nuevo valor hash en su clave, independientemente de si se actualizó su contenido determinado.

Eliminaciones

Si se cambia un documento primario de modo que ya no exista un documento secundario generado por las proyecciones de índices (un ejemplo sería si se abrevia un texto para que haya menos fragmentos que antes), se elimina el documento secundario correspondiente en el índice de búsqueda. Los documentos secundarios restantes también obtienen su clave actualizada para incluir un nuevo valor hash, incluso si su contenido no ha cambiado de otro modo.

Si un documento primario se elimina completamente del origen de datos, los documentos secundarios correspondientes solo se eliminan si un elemento dataDeletionDetectionPolicy definido en la definición del origen de datos detecta la eliminación. Si no tiene un elemento dataDeletionDetectionPolicy configurado y tiene que eliminar un documento primario del origen de datos, debe eliminar manualmente los documentos secundarios si ya no se quieren.