Creación de un índice en Azure AI Search

En Azure AI Search, el objetivo de las solicitudes de consulta es el texto que permite búsquedas en un índice de búsqueda.

En este artículo, aprenderá los pasos necesarios para definir y publicar un índice de búsqueda. Al crearse un índice, se establece la estructura de datos física en el servicio de búsqueda. Una vez que exista la definición de índice, cargar el índice se realiza como una tarea independiente.

Requisitos previos

  • Permisos de escritura. El permiso se puede conceder a través de una clave de API de administración en la solicitud. Como alternativa, si usa el control de acceso basado en roles, envíe una solicitud como miembro con el rol Colaborador de búsqueda.

  • Reconocimiento de los datos que desee indexar. La creación de un índice es un ejercicio de definición de esquemas, así que debe tener una idea clara de los campos de origen en los que desee que se pueda buscar, recuperar, filtrar, clasificar y ordenar (encontrará una guía de instrucciones al respecto en la lista de comprobación de esquema).

    También debe tener un campo único en los datos de origen que se puede usar como clave de documento (o identificador) en el índice.

  • Una ubicación de índice estable. No se admite el traslado de un índice existente a otro servicio de búsqueda de forma inmediata. Examine los requisitos de la aplicación y asegúrese de que el servicio existente, así como su capacidad y ubicación, cubren sus necesidades.

  • Por último, todos los niveles de servicio tiene límites de índice en el número de objetos que se pueden crear. Por ejemplo, si está experimentando en el nivel Gratis, solo puede tener tres índices en un momento dado. Dentro del propio índice, hay límites en el número de campos y colecciones complejos.

Claves de documento

Los índices de búsqueda tiene un campo obligatorio: una clave de documento. Una clave de documento es el identificador único de cualquier documento de búsqueda. En Azure AI Search, debe ser una cadena y debe originarse a partir de valores únicos en el origen de datos que proporcione el contenido que se va a indexar. Los servicios de búsqueda no generan valores de clave, pero en algunos escenarios (como el indexador de Azure Table) sintetizan los valores existentes para crear una clave única para los documentos que se van a indexar.

Durante la indexación incremental, donde se indexa el contenido nuevo y el actualizado, se agregan los documentos entrantes con nuevas claves, mientras que los documentos entrantes con claves existentes se combinan o se sobrescriben, en función de si los campos de índice son nulos o se han rellenado.

Lista de comprobación de esquema

Use esta lista de comprobación como ayuda para la toma de decisiones de diseño para el índice de búsqueda.

  1. Revise las convenciones de nomenclatura para que los nombres de índice y campo se ajusten a las reglas de nomenclatura.

  2. Consulte los tipos de datos admitidos. El tipo de datos afectará a cómo se usa el campo. Por ejemplo, el contenido numérico se puede filtrar, pero no se puede buscar el texto completo. El tipo de datos más común es Edm.String para el texto que permite búsquedas, que se tokeniza y consulta mediante el motor de búsqueda de texto completo.

  3. Identifique una clave de documento. Una clave de documento es un requisito del índice. Es un campo con una sola cadena y se rellena a partir de un campo de datos de origen que contiene valores únicos. Por ejemplo, si va a indexar desde Blob Storage, la ruta de acceso del almacenamiento de los metadatos se usa a menudo como clave de documento, ya que identifica de forma única cada uno de los blobs del contenedor.

  4. Identifique los campos del origen de datos que aportan contenido que permite realizar búsquedas en el índice. El contenido que permite búsquedas incluye cadenas cortas o largas que se consultan mediante el motor de búsqueda de texto completo. Si el contenido es detallado (frases pequeñas o fragmentos más grandes), experimente con diferentes analizadores para ver cómo se tokeniza el texto.

    Las asignaciones de atributos de campo determinan tanto los comportamientos de búsqueda como la representación física del índice en el servicio de búsqueda. Determinar cómo se deben especificar los campos es un proceso iterativo para muchos clientes. Para acelerar las iteraciones, comience con datos de ejemplo para que pueda anular y recompilar fácilmente.

  5. Identifique qué campos de origen se pueden usar como filtros. El contenido numérico y los campos de texto corto, especialmente los que tienen valores repetidos, son buenas opciones. Al trabajar con filtros, recuerde:

    • Opcionalmente, los campos filtrables se pueden usar en la navegación por facetas.

    • Los campos filtrables se devuelven en orden arbitrario, por lo que considere la posibilidad de que también se puedan ordenar.

  6. Determine si desea usar el analizador predeterminado ("analyzer": null) u otro. Los analizadores se usan para tokenizar campos de texto durante la indexación y la ejecución de consultas.

    En el caso de las cadenas multilingües, considere la posibilidad de usar un analizador de idioma.

    Para cadenas con guiones o caracteres especiales, considere la posibilidad de analizadores especializados. Un ejemplo es el analizador por palabra clave, que trata el contenido de un campo como token único. Esto comportamiento es útil para datos como códigos postales, identificadores y algunos nombres de producto. Para más información, consulte Búsqueda de términos parciales y patrones con caracteres especiales.

Nota:

La búsqueda de texto completo se realiza mediante términos que se tokenizan durante la indexación. Si las consultas no devuelven los resultados esperados, pruebe la tokenización para comprobar que la cadena realmente existe. Puede probar diferentes analizadores en las cadenas para ver cómo se generan los tokens para varios analizadores.

Creación de un índice

Cuando esté listo para crear el índice, use un cliente de búsqueda que pueda enviar la solicitud. Puede usar Azure Portal o las API REST para realizar las primeras pruebas de desarrollo y de prueba de concepto.

Durante el desarrollo, haga planes para realizar recompilaciones con frecuencia. Como se crean estructuras físicas en el servicio, la mayoría de las modificaciones realizadas requieren anular los índices y volverlos a crear. Considere la posibilidad de trabajar con un subconjunto de los datos para asegurarse de que las recompilaciones van más rápido.

El diseño de índices a través del portal aplica ciertos requisitos y reglas de esquema para tipos de datos específicos, como no permitir funciones de búsqueda de texto completo en campos numéricos.

  1. Inicie sesión en Azure Portal.

  2. En la página Información general del servicio de búsqueda, elija cualquiera de las opciones para crear un índice de búsqueda:

    El asistente es un flujo de trabajo de un extremo a otro que crea un indexador, un origen de datos y un índice terminado. También carga los datos. Si esto es más de lo que desea, use Agregar índice en su lugar.

En la siguiente captura de pantalla se resaltan los lugares en que aparecen las opciones Agregar índice e Importar datos en la barra de comandos. Después de crear un índice, puede encontrarlo de nuevo en la pestaña Índices.

Add index command

Sugerencia

Después de crear un índice en el portal, puede copiar la representación JSON y agregarla al código de la aplicación.

Establecer corsOptions para las consultas entre orígenes

Los esquemas de índice incluyen una sección para establecer corsOptions. De forma predeterminada, JavaScript del lado cliente no puede llamar a ninguna API porque los exploradores impiden todas las solicitudes entre orígenes. Para permitir que se realicen consultas de origen cruzado al índice, habilite CORS (uso compartido de recursos entre orígenes) estableciendo el atributo corsOptions. Por motivos de seguridad, solamente las API de consulta admiten CORS.

"corsOptions": {
  "allowedOrigins": [
    "*"
  ],
  "maxAgeInSeconds": 300

Es posible establecer para CORS las siguientes propiedades:

  • allowedOrigins (obligatorio): se trata de una lista de orígenes a los que se les concede acceso a su índice. El código JavaScript servido desde estos orígenes puede consultar el índice (suponiendo que el autor de la llamada proporcione una clave válida o tenga permisos). Cada origen tiene normalmente el formato protocol://<fully-qualified-domain-name>:<port> aunque <port> se omite a menudo. Para obtener más información, consulte Uso compartido de recursos entre orígenes (Wikipedia).

    Si desea permitir el acceso a todos los orígenes, incluya * como elemento único en la matriz allowedOrigins. Esta práctica no es recomendable para los servicios de búsqueda de producción, pero a menudo resulta útil para el desarrollo y la depuración.

  • maxAgeInSeconds (opcional): los exploradores usan este valor para determinar la duración (en segundos) para almacenar en la memoria caché las respuestas preparatorias de CORS. Esto debe ser un entero no negativo. Un período de caché más largo ofrece un mejor rendimiento, pero amplía la cantidad de tiempo que requiere una directiva de CORS para surtir efecto. Si no se establece este valor, se aplica una duración predeterminada de cinco minutos.

Actualizaciones permitidas en índices existentes

Crear índice crea las estructuras de datos físicos (archivos e índices invertidos) en el servicio de búsqueda. Una vez creado el índice, la capacidad de realizar cambios mediante la opción Actualizar índice depende de si la modificación invalida esas estructuras físicas. La mayoría de los atributos de campo no se pueden cambiar una vez creado el campo en el índice.

Como alternativa, puede crear un alias de índice que sirva como referencia estable en el código de la aplicación. En lugar de actualizar el código, puede actualizar un alias de índice para que apunte a versiones de índice más recientes.

Para minimizar el abandono en el proceso de diseño, en la tabla siguiente se describen qué elementos son fijos y flexibles en el esquema. El cambio de un elemento fijo requiere una recompilación del índice, mientras que los elementos flexibles se pueden cambiar en cualquier momento sin afectar a la implementación física.

Elemento ¿Se puede actualizar?
Nombre No
Clave No
Tipos y nombres de campo No
Atributos de campo (que se puedan buscar, filtrar, clasificar, ordenar) No
Atributo de campo (recuperable)
Analyzer Puede agregar y modificar analizadores personalizados en el índice. Con respecto a las asignaciones de analizador en campos de cadena, solo puede modificar searchAnalyzer. Todas las demás asignaciones y modificaciones requieren una recompilación.
Perfiles de puntuación
Proveedores de sugerencias No
scripting remoto entre orígenes (CORS)
Cifrado

Pasos siguientes

Use los vínculos siguientes para familiarizarse con la carga de un índice con datos o la ampliación de un índice con un mapa de sinónimos.