Compartir vía


Indexación de datos a partir de bases de datos de Azure SQL

En este artículo, aprenderá a configurar un indexador que importa contenido de Azure SQL Database o Azure SQL Managed Instance y hace que se puedan realizar búsquedas en él en Azure AI Search.

En este artículo se complementa la creación de un indexador con información específica de Azure SQL. Usa Azure Portal y las API de REST para demostrar un flujo de trabajo de tres partes común a todos los indexadores: crear un origen de datos, crear un índice y crear un indexador. La extracción de datos se produce cuando se envía la solicitud para crear un indexador.

En este artículo también aparece:

Nota:

La sincronización de datos en tiempo real no es posible con un indexador. Un indexador puede volver a indexar la tabla cada cinco minutos como máximo. Si las actualizaciones de datos deben reflejarse en el índice antes, se recomienda insertar filas actualizadas directamente.

Requisitos previos

  • Una base de datos de Azure SQL con datos en una sola tabla o vista, o bien una instancia de SQL Managed Instance con un punto de conexión público.

    Use una tabla si los datos son grandes o si necesita indexación incrementalmediante las funcionalidades de detección de cambios nativas de SQL.

    Use una vista si necesita consolidar datos de varias tablas. Las vistas grandes no son ideales para el indexador de SQL. Una solución alternativa consiste en crear una nueva tabla solo para la ingesta en el índice de Azure AI Search. Puede usar el seguimiento de cambios integrado de SQL para realizar un seguimiento de las filas nuevas y modificadas, lo que es más fácil de implementar que la marca de límite superior.

  • Permisos de lectura. Azure AI Search admite la autenticación de SQL Server, donde el nombre de usuario y la contraseña se proporcionan en la cadena de conexión. Como alternativa, puede configurar una identidad administrada y usar roles de Azure.

Para trabajar con los ejemplos de este artículo, necesita Azure Portal o un Cliente REST. Si usa Azure Portal, asegúrese de que el acceso a todas las redes públicas está habilitado en el firewall de Azure SQL y de que el cliente tiene acceso a través de una regla de entrada. Para un cliente REST que se ejecute localmente, configure el firewall de SQL Server para permitir el acceso entrante desde la dirección IP del dispositivo. Otros enfoques para crear un indexador de Azure SQL incluyen los SDK de Azure.

Pruebe con datos de ejemplo

Use estas instrucciones para crear y cargar una tabla en Azure SQL Database con fines de prueba.

  1. Descargue hotels-azure-sql.sql de GitHub para crear una tabla en Azure SQL Database que contenga un subconjunto del conjunto de datos de hoteles de ejemplo.

  2. Inicie sesión en Azure Portal y cree una base de datos de Azure SQL y un servidor de bases de datos. Considere la posibilidad de configurar la autenticación de SQL Server y la autenticación de Microsoft Entra ID. Si no tiene permisos para configurar roles en Azure, puede usar la autenticación de SQL como solución alternativa.

  3. Configure el firewall del servidor en todas las solicitudes entrantes del dispositivo local.

  4. En la base de datos de Azure SQL, seleccione Editor de Power Query (versión preliminar) y, a continuación, seleccione Nueva consulta.

  5. Pegue y ejecute el script T-SQL que crea la tabla de hoteles.

    CREATE TABLE tbl_hotels
     (
         Id TINYINT PRIMARY KEY,
         Modified DateTime NULL DEFAULT '0000-00-00 00:00:00',
         IsDeleted TINYINT,
         HotelName VARCHAR(40),
         Category VARCHAR(20),
         City VARCHAR(30),
         State VARCHAR(4),
         Description VARCHAR(500)
     );
    
  6. Pegue y ejecute el script T-SQL que inserta registros.

     -- Insert rows
     INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (1, CURRENT_TIMESTAMP, 0,  'Stay-Kay City Hotel', 'Boutique', 'New York', 'NY', 'This classic hotel is fully-refurbished and ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Times Square and the historic centre of the city, as well as other places of interest that make New York one of Americas most attractive and cosmopolitan cities.');
     INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (10, CURRENT_TIMESTAMP, 0, 'Countryside Hotel', 'Extended-Stay', 'Durham', 'NC', 'Save up to 50% off traditional hotels. Free WiFi, great location near downtown, full kitchen, washer & dryer, 24\/7 support, bowling alley, fitness center and more.');
     INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (11, CURRENT_TIMESTAMP, 0, 'Royal Cottage Resort', 'Extended-Stay', 'Bothell', 'WA', 'Your home away from home. Brand new fully equipped premium rooms, fast WiFi, full kitchen, washer & dryer, fitness center. Inner courtyard includes water features and outdoor seating. All units include fireplaces and small outdoor balconies. Pets accepted.');
     INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (12, CURRENT_TIMESTAMP, 0, 'Winter Panorama Resort', 'Resort and Spa', 'Wilsonville', 'OR', 'Plenty of great skiing, outdoor ice skating, sleigh rides, tubing and snow biking. Yoga, group exercise classes and outdoor hockey are available year-round, plus numerous options for shopping as well as great spa services. Newly-renovated with large rooms, free 24-hr airport shuttle & a new restaurant. Rooms\/suites offer mini-fridges & 49-inch HDTVs.');
     INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (13, CURRENT_TIMESTAMP, 0, 'Luxury Lion Resort', 'Luxury', 'St. Louis', 'MO', 'Unmatched Luxury. Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium and transportation hubs, we feature the best in convenience and comfort.');
     INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (14, CURRENT_TIMESTAMP, 0, 'Twin Vortex Hotel', 'Luxury', 'Dallas', 'TX', 'New experience in the making. Be the first to experience the luxury of the Twin Vortex. Reserve one of our newly-renovated guest rooms today.');
     INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (15, CURRENT_TIMESTAMP, 0, 'By the Market Hotel', 'Budget', 'New York', 'NY', 'Book now and Save up to 30%. Central location. Walking distance from the Empire State Building & Times Square, in the Chelsea neighborhood. Brand new rooms. Impeccable service.');
     INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (16, CURRENT_TIMESTAMP, 0, 'Double Sanctuary Resort', 'Resort and Spa', 'Seattle', 'WA', '5 Star Luxury Hotel - Biggest Rooms in the city. #1 Hotel in the area listed by Traveler magazine. Free WiFi, Flexible check in\/out, Fitness Center & espresso in room.');
     INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (17, CURRENT_TIMESTAMP, 0, 'City Skyline Antiquity Hotel', 'Boutique', 'New York', 'NY', 'In vogue since 1888, the Antiquity Hotel takes you back to bygone era. From the crystal chandeliers that adorn the Green Room, to the arched ceilings of the Grand Hall, the elegance of old New York beckons. Elevate Your Experience. Upgrade to a premiere city skyline view for less, where old world charm combines with dramatic views of the city, local cathedral and midtown.');
     INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (18, CURRENT_TIMESTAMP, 0, 'Ocean Water Resort & Spa', 'Luxury', 'Tampa', 'FL', 'New Luxury Hotel for the vacation of a lifetime. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.');
     INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (19, CURRENT_TIMESTAMP, 0, 'Economy Universe Motel', 'Budget', 'Redmond', 'WA', 'Local, family-run hotel in bustling downtown Redmond. We are a pet-friendly establishment, near expansive Marymoor park, haven to pet owners, joggers, and sports enthusiasts. Close to the highway and just a short drive away from major cities.');
     INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (20, CURRENT_TIMESTAMP, 0, 'Delete Me Hotel', 'Unknown', 'Nowhere', 'XX', 'Test-case row for change detection and delete detection . For change detection, modify any value, and then re-run the indexer. For soft-delete, change IsDelete from zero to a one, and then re-run the indexer.');
    
    
  7. Ejecute una consulta para confirmar la carga.

    SELECT Description FROM tbl_hotels;
    

Se mostrarán resultados similares al recorte de pantalla siguiente.

Recorte de pantalla de los resultados de la consulta que muestra el campo de descripción.

El campo Descripción proporciona el contenido más detallado. Debe dirigirse a este campo para la búsqueda de texto completo y la vectorización opcional.

Ahora que tiene una tabla de base de datos, puede usar Azure Portal, el cliente REST o un SDK de Azure para indexar los datos.

Sugerencia

Otro recurso que proporciona contenido de ejemplo y código se puede encontrar en Azure-Samples/SQL-AI-samples.

Uso de Azure Portal

Puede usar el Asistente de Importación de datos o el Asistente de Importación y vectorización de datos para automatizar la indexación desde una tabla o vista de base de datos SQL. La configuración del origen de datos es similar para ambos asistentes.

  1. Inicie el asistente.

  2. En Conectarse a los datos, seleccione o compruebe que el tipo de origen de datos sea Azure SQL Database o SQL Database .

    El nombre del origen de datos hace referencia al objeto de conexión del origen de datos en Búsqueda de Azure AI. Si usa el asistente para vectores, el nombre del origen de datos se genera automáticamente mediante un prefijo personalizado especificado al final del flujo de trabajo del asistente.

  3. Especifique el nombre del servidor, el nombre de la base de datos y el nombre de vista o tabla.

    Azure Portal valida la conexión. Si la base de datos está en pausa debido a la inactividad, vaya a la página del servidor de bases de datos y asegúrese de que el estado de la base de datos es en línea. Puede ejecutar una consulta en cualquier tabla para activar la base de datos.

    Recorte de pantalla de la página de estado de la base de datos en Azure Portal.

  4. Especifique un método de autenticación, ya sea un inicio de sesión de SQL Server definido durante la instalación del servidor o una identidad administrada.

    Si configura Búsqueda de Azure AI para usar una identidad administrada y crea una asignación de roles en el servidor de bases de datos que concede permisos de colaborador de SQL Server o colaborador de base de datos de SQL a la identidad, el indexador puede conectarse a Azure SQL mediante Microsoft Entra ID y roles.

  5. Para el asistente de importación y vectorización de datos, puede especificar opciones para el seguimiento de cambios y eliminaciones.

  6. Continúe con los pasos restantes para completar el asistente:

Usar las API REST

En esta sección se muestran las llamadas a la API de REST que crean un origen de datos, un índice y un indexador.

Definición del origen de datos

La definición del origen de datos especifica los datos que se indexan, las credenciales y las directivas para identificar los cambios en los datos. Un origen de datos se define como un recurso independiente de forma que puedan usarlo varios indexadores.

  1. Cree un origen de datos o Cree o actualice un origen de datos para establecer su definición:

     POST https://myservice.search.windows.net/datasources?api-version=2024-07-01
     Content-Type: application/json
     api-key: admin-key
    
     {
         "name" : "myazuresqldatasource",
         "description" : "A database for testing Azure AI Search indexes.",
         "type" : "azuresql",
         "credentials" : { "connectionString" : "Server=tcp:<your server>.database.windows.net,1433;Database=<your database>;User ID=<your user name>;Password=<your password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;" },
         "container" : { 
             "name" : "name of the table or view that you want to index",
             "query" : null (not supported in the Azure SQL indexer)
             },
         "dataChangeDetectionPolicy": null,
         "dataDeletionDetectionPolicy": null,
         "encryptionKey": null,
         "identity": null
     }
    
  2. Especifique un nombre único para el origen de datos que respete las convenciones de nomenclatura de Azure AI Search.

  3. Establezca "type" en "azuresql" (obligatorio).

  4. Establezca "credentials" en una cadena de conexión:

    • Puede obtener la cadena de conexión de acceso completo en Azure Portal. Use la opción ADO.NET connection string. Escriba un nombre de usuario y una contraseña.

    • De forma alternativa, puede especificar una cadena de conexión de identidad administrada que no incluya secretos de base de datos con el formato siguiente: Initial Catalog|Database=<your database name>;ResourceId=/subscriptions/<your subscription ID>/resourceGroups/<your resource group name>/providers/Microsoft.Sql/servers/<your SQL Server name>/;Connection Timeout=connection timeout length;.

    Para más información, consulte Conexión al indexador de base de datos de Azure SQL mediante una identidad administrada.

Adición de campos de búsqueda a un índice

En un índice de búsqueda, agregue campos que se correspondan a los campos de la base de datos de SQL. Asegúrese de que el esquema de índice de búsqueda es compatible con el esquema de origen mediante el uso de tipos de datos equivalentes.

  1. Crear o actualizar un índice para definir campos de búsqueda que almacenan datos:

    POST https://[service name].search.windows.net/indexes?api-version=2024-07-01
    Content-Type: application/json
    api-key: [Search service admin key]
    {
        "name": "mysearchindex",
        "fields": [{
            "name": "id",
            "type": "Edm.String",
            "key": true,
            "searchable": false
        }, 
        {
            "name": "description",
            "type": "Edm.String",
            "filterable": false,
            "searchable": true,
            "sortable": false,
            "facetable": false,
            "suggestions": true
        }
      ]
    }
    
  2. Cree un campo de clave de documento ("clave": true) que identifique de forma única cada documento de búsqueda. Este es el único campo necesario en un índice de búsqueda. Normalmente, la clave principal de la tabla se asigna al campo de clave de índice. La clave del documento debe ser única y no null. Los valores pueden ser numéricos en los datos de origen, pero en un índice de búsqueda, una clave siempre es una cadena.

  3. Cree más campos para agregar contenido que se pueda buscar mejor. Consulte Creación de un índice para más información al respecto.

Asignación de tipos de datos

tipo de datos de SQL Tipos de campos de Azure AI Search Notas
bit Edm.Boolean, Edm.String
int, smallint, tinyint Edm.Int32, Edm.Int64, Edm.String
bigint Edm.Int64, Edm.String
real, float Edm.Double, Edm.String
smallmoney, numérico decimal de dinero Edm.String Azure AI Search no admite la conversión de tipos decimales en Edm.Double, ya que se podría perder precisión
char, nchar, varchar, nvarchar Edm.String
Collection(Edm.String)
Una cadena SQL se puede usar para rellenar un campo Collection(Edm.String) si la cadena representa una matriz JSON de cadenas: ["red", "white", "blue"]
smalldatetime, datetime, datetime2, date, datetimeoffset Edm.DateTimeOffset, Edm.String
uniqueidentifer Edm.String
geography Edm.GeographyPoint Solo se admiten instancias de geography de tipo POINT con SRID 4326 (que es el valor predeterminado)
rowversion No aplicable Las columnas de versión de la fila no se pueden almacenar en el índice de búsqueda, pero pueden usarse para el seguimiento de cambios
time, timespan, binary, varbinary, image, xml, geometry, tipos CLR No aplicable No compatible

Configuración y ejecución del indexador de Azure SQL

Una vez creados el índice y el origen de datos, ya podrá crear el indexador. La configuración del indexador especifica las entradas, los parámetros y las propiedades que controlan los comportamientos en tiempo de ejecución.

  1. Cree o actualice un indexador asignándole un nombre y haciendo referencia al origen de datos y al índice de destino:

    POST https://[service name].search.windows.net/indexers?api-version=2024-07-01
    Content-Type: application/json
    api-key: [search service admin key]
    {
        "name" : "[my-sqldb-indexer]",
        "dataSourceName" : "[my-sqldb-ds]",
        "targetIndexName" : "[my-search-index]",
        "disabled": null,
        "schedule": null,
        "parameters": {
            "batchSize": null,
            "maxFailedItems": 0,
            "maxFailedItemsPerBatch": 0,
            "base64EncodeKeys": false,
            "configuration": {
                "queryTimeout": "00:04:00",
                "convertHighWaterMarkToRowVersion": false,
                "disableOrderByHighWaterMarkColumn": false
            }
        },
        "fieldMappings": [],
        "encryptionKey": null
    }
    
  2. En parámetros, la sección de configuración tiene parámetros específicos de Azure SQL:

    • El tiempo de espera de consulta predeterminado para la ejecución de consultas SQL es de 5 minutos, que puede invalidar.

    • "convertHighWaterMarkToRowVersion" optimiza la directiva de detección de cambios en la marca de agua superior. Las directivas de detección de cambios se establecen en el origen de datos. Si usa la directiva de detección de cambios nativa, este parámetro no tiene ningún efecto.

    • "disableOrderByHighWaterMarkColumn" hace que la consulta SQL utilizada por la directiva de detección de cambios de marca de agua superior omita la cláusula ORDER BY (ordenar por). Si usa la directiva de detección de cambios nativa, este parámetro no tiene ningún efecto.

  3. Especifique asignaciones de campos si hay diferencias en el nombre o el tipo de campo, o si necesita varias versiones de un campo de origen en el índice de búsqueda.

  4. Consulte Creación de un indexador para más información sobre otras propiedades.

Un indexador se ejecuta automáticamente cuando se crea. Puede evitarlo estableciendo el valor de "disabled" en true. Para controlar la ejecución del indexador, ejecute un indexador a petición o prográmelo.

Comprobación del estado del indexador

Para supervisar el estado del indexador y el historial de ejecución, compruebe el historial de ejecución del indexador en Azure Portal, o envíe una API de RESTObtener estado del indexador

  1. En la página del servicio de búsqueda, abra Administración de búsqueda>indexadores.

  2. Seleccione un indexador para acceder al historial de configuración y ejecución.

  3. Seleccione un trabajo de indexador específico para ver detalles, advertencias y errores.

El historial de ejecución contiene como máximo las 50 ejecuciones completadas más recientemente en orden cronológico inverso (la ejecución más reciente aparece en primer lugar).

Indexación de filas nuevas, cambiadas y eliminadas

Si la base de datos SQL admite el seguimiento de cambios, un indexador de búsqueda puede seleccionar solo el contenido nuevo y actualizado en las ejecuciones posteriores del indexador.

Para habilitar la indexación incremental, establezca la propiedad "dataChangeDetectionPolicy" en la definición del origen de datos. Esta propiedad indica al indexador qué mecanismo de seguimiento de cambios se usa en la tabla o vista.

Para los indexadores de Azure SQL, hay dos directivas de detección de cambios:

  • "SqlIntegratedChangeTrackingPolicy" (solo se aplica a tablas)

  • "HighWaterMarkChangeDetectionPolicy" (funciona para tablas y vistas)

Directiva de seguimiento de cambios integrada de SQL

Se recomienda usar "SqlIntegratedChangeTrackingPolicy" por su eficacia y su capacidad para identificar las filas eliminadas.

Requisitos de base de datos:

  • SQL Server 2012 SP3 y versiones posteriores, si usa SQL Server en máquinas virtuales de Azure
  • Azure SQL Database o SQL Managed Instance
  • Solo tablas (sin vistas)
  • En la base de datos, habilite el seguimiento de los cambios para la tabla.
  • Ninguna clave principal compuesta (una clave principal que contiene más de una columna) en la tabla.
  • No hay índices agrupados en la tabla. Como solución, cualquier índice agrupado tendría que eliminarse y volver a crearse como índice no agrupado; sin embargo, el rendimiento podría verse afectado en el origen en comparación con un índice agrupado

Las directivas de detección de cambios se agregan a las definiciones de orígenes de datos. Para usar esta directiva, cree o actualice el origen de datos de la siguiente manera:

POST https://myservice.search.windows.net/datasources?api-version=2024-07-01
Content-Type: application/json
api-key: admin-key
    {
        "name" : "myazuresqldatasource",
        "type" : "azuresql",
        "credentials" : { "connectionString" : "connection string" },
        "container" : { "name" : "table name" },
        "dataChangeDetectionPolicy" : {
            "@odata.type" : "#Microsoft.Azure.Search.SqlIntegratedChangeTrackingPolicy"
        }
    }

Al usar una directiva de seguimiento de cambios integrada de SQL, no especifique una directiva de detección de eliminación de datos independiente. La directiva de seguimiento de cambios integrada de SQL tiene compatibilidad integrada para identificar las filas eliminadas. Sin embargo, para que las filas eliminadas se detecten automáticamente, la clave de documento del índice de búsqueda debe ser la misma clave principal en la tabla SQL.

Nota:

Cuando se usa TRUNCATE TABLE para quitar un gran número de filas de una tabla SQL, debe restablecer el indexador para que se restablezca Seguimiento de cambios y recopile las eliminaciones de filas.

Directiva de detección de cambios de límite superior

Esta directiva de detección de cambios se basa en una columna de "marca de límite superior" de la tabla o vista que captura la versión o la hora en que se actualizó por última vez una fila. Si usa una vista, debe usar una directiva de marca de límite superior.

La columna de marca de límite superior debe cumplir los siguientes requisitos:

  • Todas las inserciones especifican un valor para la columna.
  • Todas las actualizaciones de un elemento también cambian el valor de la columna.
  • El valor de esta columna aumenta con cada inserción o actualización.
  • Las consultas con las cláusulas WHERE y ORDER BY siguientes se pueden ejecutar de forma eficaz: WHERE [High Water Mark Column] > [Current High Water Mark Value] ORDER BY [High Water Mark Column].

Nota:

Se recomienda encarecidamente usar el tipo de datos rowversion para la columna de marca de límite superior. Si se utiliza cualquier otro tipo de datos, no se garantiza que el seguimiento de cambios capture todos los cambios en el caso de transacciones que se ejecutan simultáneamente con una consulta de indexador. Cuando se usa rowversion en una configuración con réplicas de solo lectura, debe señalar el indexador a la réplica principal. Solo se puede usar una réplica principal para escenarios de sincronización de datos.

Las directivas de detección de cambios se agregan a las definiciones de orígenes de datos. Para usar esta directiva, cree o actualice el origen de datos de la siguiente manera:

POST https://myservice.search.windows.net/datasources?api-version=2024-07-01
Content-Type: application/json
api-key: admin-key
    {
        "name" : "myazuresqldatasource",
        "type" : "azuresql",
        "credentials" : { "connectionString" : "connection string" },
        "container" : { "name" : "table or view name" },
        "dataChangeDetectionPolicy" : {
            "@odata.type" : "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
            "highWaterMarkColumnName" : "[a rowversion or last_updated column name]"
        }
    }

Nota:

Si la tabla de origen no tiene un índice en la columna de marca de agua superior, las consultas utilizadas por el indexador SQL pueden agotar el tiempo de espera. En concreto, la cláusula ORDER BY [High Water Mark Column] requiere un índice para ejecutarse de forma eficaz cuando la tabla contiene muchas filas.

convertHighWaterMarkToRowVersion

Si usa un tipo de datos rowversion para la columna de marca de límite superior, considere la posibilidad de configurar la propiedad convertHighWaterMarkToRowVersion en la configuración indexador. Si se establece esta propiedad en true, se produce el comportamiento siguiente:

  • Utilice el tipo de datos rowversion para la columna de marca de límite superior en la consulta SQL del indexador. El uso del tipo de datos correcto mejora el rendimiento de las consultas de indexador.

  • Reste 1 del valor rowversion antes de que se ejecute la consulta de indexador. Las vistas con uniones de uno a muchos pueden tener filas con valores de la versión de fila duplicadas. Restar 1 garantiza que la consulta de indexador no pierde estas filas.

Para habilitar esta propiedad, cree o actualice el indexador con la siguiente configuración:

    {
      ... other indexer definition properties
     "parameters" : {
            "configuration" : { "convertHighWaterMarkToRowVersion" : true } }
    }

queryTimeout

Si se producen errores de tiempo de espera, establezca la opción de configuración del indexador queryTimeout en un valor mayor que el tiempo de espera predeterminado de 5 minutos. Por ejemplo, para establecer el tiempo de espera en 10 minutos, cree o actualice el indexador con la siguiente configuración:

    {
      ... other indexer definition properties
     "parameters" : {
            "configuration" : { "queryTimeout" : "00:10:00" } }
    }

disableOrderByHighWaterMarkColumn

También puede deshabilitar la cláusula ORDER BY [High Water Mark Column]. Sin embargo, esto no es recomendable porque si la ejecución del indizador se interrumpe por un error, el indizador tiene que volver a procesar todas las filas si se ejecuta más tarde, incluso si el indizador ya ha procesado casi todas las filas en el momento en que se interrumpió. Para deshabilitar la cláusula ORDER BY, utilice la configuración disableOrderByHighWaterMarkColumn en la definición del indexador:

    {
     ... other indexer definition properties
     "parameters" : {
            "configuration" : { "disableOrderByHighWaterMarkColumn" : true } }
    }

Directiva de detección de eliminación de columna de eliminación temporal

Cuando se eliminan filas de la tabla de origen, probablemente le interesará eliminar dichas filas del índice de búsqueda. Si usa la directiva de seguimiento de cambios integrada de SQL, esto se lleva a cabo automáticamente. Sin embargo, la directiva el seguimiento de cambios de marca de límite superior no le ayuda con las filas eliminadas. ¿Qué debe hacer?

Si las filas se quitan físicamente de la tabla, Azure AI Search no tiene forma de deducir la presencia de registros que ya no existen. Sin embargo, puede utilizar la técnica de "eliminación temporal" para eliminar filas lógicamente sin quitarlas de la tabla. Agregue una columna a la tabla o vista y marque filas como eliminadas mediante esa columna.

Cuando use la técnica de la eliminación temporal, puede especificar la directiva de eliminación temporal de la manera que se indica a continuación al crear o actualizar el origen de datos:

    {
        …,
        "dataDeletionDetectionPolicy" : {
           "@odata.type" : "#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",
           "softDeleteColumnName" : "[a column name]",
           "softDeleteMarkerValue" : "[the value that indicates that a row is deleted]"
        }
    }

softDeleteMarkerValue debe ser una cadena en la representación JSON de su origen de datos. Use la representación de cadena del valor real. Por ejemplo, si tiene una columna de enteros donde las filas eliminadas se marcan con el valor 1, use "1". Si tiene una columna BIT donde las filas eliminadas se marcan con el valor booleano true, use el literal de cadena "True" o "true", no importan las mayúsculas y minúsculas.

Si va a configurar una directiva de eliminación temporal del Azure Portal, no agregue comillas alrededor del valor del marcador de eliminación temporal. El contenido del campo ya se entiende como una cadena y se traduce automáticamente en una cadena JSON. En los ejemplos anteriores, simplemente escriba 1, True o true en el campo de Azure Portal.

Preguntas más frecuentes

P: ¿Puedo indexar columnas Always Encrypted?

No, los indexadores de Azure AI Search no admiten actualmente columnas Always Encrypted.

P: ¿Puedo usar un indizador de SQL Azure con Bases de datos SQL que se ejecutan en máquinas virtuales de IaaS en Azure?

Sí. Sin embargo, debe permitir que el servicio de búsqueda se conecte a su base de datos. Para más información, consulte el artículo Configuración de una conexión desde un indexador de Azure AI Search a SQL Server en una máquina virtual de Azure.

P: ¿Puedo usar un indizador de SQL Azure con Bases de datos SQL que se ejecutan localmente?

No directamente. No se recomienda ni se admite una conexión directa, ya que requeriría abrir las bases de datos al tráfico de Internet. Los clientes han realizado correctamente este escenario mediante tecnologías de puente como Azure Data Factory. Para más información, consulte Inserción de datos en un índice de Azure AI Search mediante el uso de Azure Data Factory.

P: ¿Puedo usar una réplica secundaria en un clúster de conmutación por error como un origen de datos?

Depende. Para la indexación completa de una tabla o vista, puede usar una réplica secundaria.

Para la indexación incremental, Azure AI Search admite dos directivas de detección de cambios: seguimiento de cambios integrado de SQL y marca de límite superior.

En las réplicas de solo lectura, la SQL Database no admite el seguimiento de cambios integrado. Por tanto, debe usar la directiva Marca de límite superior.

La recomendación estándar es usar el tipo de datos rowversion para la columna de marca de límite superior. Pero el uso de rowversion se basa en la función MIN_ACTIVE_ROWVERSION, que no se admite en las réplicas de solo lectura. Por tanto, si usa rowversion debe apuntar el indexador a una réplica principal.

Si intenta usar rowversion en una réplica de solo lectura, obtendrá el siguiente error:

"No se admite el uso de una columna rowversion para el seguimiento de cambios en réplicas de disponibilidad secundarias (de solo lectura). Actualice el origen de datos y especifique una conexión con la réplica de disponibilidad principal. La propiedad actual de "Updateability" de la base de datos es "READ_ONLY"".

P: ¿Puedo usar una columna alternativa, que no sea rowversion, para el seguimiento de los cambios de marca de límite superior?

No se recomienda. Solo rowversion permite la sincronización de datos confiable. Sin embargo, dependiendo de la lógica de su aplicación, puede ser seguro si:

  • Se puede asegurar de que, cuando se ejecuta el indexador, no hay ninguna transacción pendiente en la tabla que se indexa (por ejemplo, todas las actualizaciones de tabla tienen lugar como un lote según una programación y la programación del indexador de Azure AI Search está establecida para evitar la superposición con la programación de las actualizaciones de tabla).

  • Vuelve a indexar periódicamente para seleccionar las filas que faltan.