Cómo indexar Cosmos DB mediante un indexador de Azure SearchHow to index Cosmos DB using an Azure Search indexer

Este artículo muestra cómo configurar una instancia de Azure Cosmos DB indizador para extraer contenido y facilitar su búsqueda en Azure Search.This article shows you how to configure an Azure Cosmos DB indexer to extract content and make it searchable in Azure Search. Este flujo de trabajo crea un índice de búsqueda de Azure y lo carga con el texto existente que se extraen de Azure Cosmos DB.This workflow creates an Azure Search index and loads it with existing text extracted from Azure Cosmos DB.

Porque terminología puede resultar confusa, merece la pena mencionar que indexación de Azure Cosmos DB y indexación de Azure Search son operaciones distintas, únicas para cada servicio.Because terminology can be confusing, it's worth noting that Azure Cosmos DB indexing and Azure Search indexing are distinct operations, unique to each service. Antes de empezar a Azure Search Index Server, la base de datos de Azure Cosmos DB debe existir previamente y contienen datos.Before you start Azure Search indexing, your Azure Cosmos DB database must already exist and contain data.

Puede usar el portal, las API de REST o SDK de .NET para indizar el contenido de Cosmos.You can use the portal, REST APIs, or .NET SDK to index Cosmos content. El indexador de Cosmos DB en Azure Search puede rastrear elementos de Azure Cosmos tiene acceso a través de estos protocolos:The Cosmos DB indexer in Azure Search can crawl Azure Cosmos items accessed through these protocols:

Nota

Voz del usuario tiene los elementos existentes para obtener soporte técnico de API.User Voice has existing items for additional API support. Puede enviar un voto para las API de Cosmos que gustaría ver admitidos en Azure Search: API de tabla, de Graph API, Apache Cassandra API.You can cast a vote for the Cosmos APIs you would like to see supported in Azure Search: Table API, Graph API, Apache Cassandra API.

Uso del portalUse the portal

El método más sencillo para la indización de los elementos de Azure Cosmos es usar un asistente en el portal Azure.The easiest method for indexing Azure Cosmos items is to use a wizard in the Azure portal. Muestreo de datos y leer los metadatos del contenedor, el importar datos asistente en Azure Search puede crear un índice predeterminado, los campos de origen se asignan a los campos de índice de destino y cargar el índice en una única operación.By sampling data and reading metadata on the container, the Import data wizard in Azure Search can create a default index, map source fields to target index fields, and load the index in a single operation. Según el tamaño y la complejidad del origen de datos, puede tener un índice de búsqueda de texto completo y operativo en cuestión de minutos.Depending on the size and complexity of source data, you could have an operational full text search index in minutes.

Se recomienda usar la misma suscripción de Azure para Azure Search y Azure Cosmos DB, preferiblemente en la misma región.We recommend using the same Azure subscription for both Azure Search and Azure Cosmos DB, preferably in the same region.

1: Preparación de los datos de origen1 - Prepare source data

Debe tener una cuenta de Cosmos, una base de datos de Azure Cosmos asignado a la API de SQL o MongoDB API y un contenedor de documentos JSON.You should have a Cosmos account, an Azure Cosmos database mapped to the SQL API or MongoDB API, and a container of JSON documents.

Asegúrese de que la base de datos de Cosmos DB contiene datos.Make sure your Cosmos DB database contains data. El Asistente para importar datos lee los metadatos y realiza el muestreo de datos para deducir un esquema de índice, pero también carga los datos de Cosmos DB.The Import data wizard reads metadata and performs data sampling to infer an index schema, but it also loads data from Cosmos DB. Si los datos no está presente, el asistente se detiene con este error "esquema de índice a detectar errores de origen de datos: No se pudo crear un índice prototipo porque el origen de datos 'emptycollection' no devolvió datos".If the data is missing, the wizard stops with this error "Error detecting index schema from data source: Could not build a prototype index because datasource 'emptycollection' returned no data".

2: Inicio del asistente para la importación de datos2 - Start Import data wizard

También puede iniciar el Asistente para desde la barra de comandos en la página del servicio Azure Search, o haga clic en agregar Azure Search en el configuración izquierdo de la sección de la cuenta de almacenamiento panel de navegación.You can start the wizard from the command bar in the Azure Search service page, or by clicking Add Azure Search in the Settings section of your storage account's left navigation pane.

Comando de importación de datos en el portalImport data command in portal

3: Configuración del origen de datos3 - Set the data source

Nota

Actualmente, no se puede crear o editar MongoDB orígenes de datos mediante Azure portal o el SDK. NET.Currently, you cannot create or edit MongoDB data sources using Azure portal or the .NET SDK. Sin embargo, se puede supervisar el historial de ejecución de los indexadores de MongoDB en el portal.However, you can monitor execution history of MongoDB indexers in the portal.

En el origen de datos página, el origen debe ser Cosmos DB, con las especificaciones siguientes:In the data source page, the source must be Cosmos DB, with the following specifications:

  • Nombre es el nombre del objeto de origen de datos.Name is the name of the data source object. Una vez creado, puede elegir para otras cargas de trabajo.Once created, you can choose it for other workloads.

  • Cuenta de COSMOS DB debe ser la cadena de conexión principal o secundaria de Cosmos DB, con un AccountEndpoint y un AccountKey.Cosmos DB account should be the primary or secondary connection string from Cosmos DB, with an AccountEndpoint and an AccountKey. La cuenta determina si los datos se convierten como SQL API o Mongo DB APIThe account determines whether data is cast as SQL API or Mongo DB API

  • Base de datos es una base de datos de la cuenta.Database is an existing database from the account.

  • Colección es un contenedor de documentos.Collection is a container of documents. Documentos deben existir para que la importación se realice correctamente.Documents must exist in order for import to succeed.

  • Consulta puede estar en blanco si desea que todos los documentos, en caso contrario, puede escribir una consulta que selecciona un subconjunto del documento.Query can be blank if you want all documents, otherwise you can input a query that selects a document subset.

    Definición del origen de datos de COSMOS DBCosmos DB data source definition

4: Omisión de la página "Agregar Cognitive Search" en el asistente4 - Skip the "Add cognitive search" page in the wizard

Agregar conocimientos cognitivos no es necesaria para la importación del documento.Adding cognitive skills is not necessary for document import. A menos que necesite específicamente incluir Cognitive Services APIs y transformaciones a la canalización de indización, omita este paso.Unless you have a specific need to include Cognitive Services APIs and transformations to your indexing pipeline, you should skip this step.

Para omitir el paso, vaya a la página siguiente.To skip the step, first go to the next page.

Botón Página siguiente de Cognitive Search

Desde dicha página puede ir directamente a la personalización del índice.From that page you can skip ahead to index customization.

Omitir el paso sobre aptitud cognitiva

5: Configuración de los atributos de índice5 - Set index attributes

En la página de Índice, debería mostrarse una lista de campos con un tipo de datos y una serie de casillas de verificación para configurar los atributos del índice.In the Index page, you should see a list of fields with a data type and a series of checkboxes for setting index attributes. El asistente puede generar una lista de campos en función de los metadatos y mediante el muestreo de los datos de origen.The wizard can generate a fields list based on metadata and by sampling the source data.

Puede seleccionar atributos de forma masiva haciendo clic en la casilla de verificación en la parte superior de una columna de atributos.You can bulk-select attributes by clicking the checkbox at the top of an attribute column. Elija Retrievable y Searchable para cada campo que se debe devolver a una aplicación cliente y está sujeta a proceso de búsqueda de texto completo.Choose Retrievable and Searchable for every field that should be returned to a client app and subject to full text search processing. Observará que enteros no son de texto completo o parcial que se puede buscar (los números se evalúan literalmente y suelen ser útiles en filtros).You'll notice that integers are not full text or fuzzy searchable (numbers are evaluated verbatim and are often useful in filters).

Revise la descripción de atributos de índice y analizadores de lenguaje para obtener más información.Review the description of index attributes and language analyzers for more information.

Dedique un momento a la revisión de las selecciones.Take a moment to review your selections. Una vez que se ejecuta al asistente, se crean las estructuras de datos físicas y no podrá modificar estos campos sin quitar y volver a crear todos los objetos.Once you run the wizard, physical data structures are created and you won't be able to edit these fields without dropping and recreating all objects.

Definición de índice de COSMOS DBCosmos DB index definition

6: Creación del indizador6 - Create indexer

Con todas las especificaciones agregadas, el asistente crea tres objetos distintos en el servicio de búsqueda.Fully specified, the wizard creates three distinct objects in your search service. Un objeto de origen de datos y un objeto de índice se guardan como recursos con nombre en el servicio Azure Search.A data source object and index object are saved as named resources in your Azure Search service. El último paso crea un objeto de indizador.The last step creates an indexer object. Al asignarle un nombre al indizador, este puede existir como un recurso independiente que se puede programar y administrar independientemente de los objetos de origen de datos y del de índice que se crearon en la misma secuencia del asistente.Naming the indexer allows it to exist as a standalone resource, which you can schedule and manage independently of the index and data source object, created in the same wizard sequence.

Si no está familiarizado con los indizadores, un indizador es un recurso en Azure Search que rastrea un origen de datos externo en busca de contenido utilizable en búsquedas.If you are not familiar with indexers, an indexer is a resource in Azure Search that crawls an external data source for searchable content. La salida de la importar datos asistente es un indizador que se rastrea el origen de datos de Cosmos DB, extrae el contenido utilizable en búsquedas y lo importa en un índice en Azure Search.The output of the Import data wizard is an indexer that crawls your Cosmos DB data source, extracts searchable content, and imports it into an index on Azure Search.

Captura de pantalla siguiente muestra la configuración predeterminada del indizador.The following screenshot shows the default indexer configuration. Puede cambiar a una vez si desea ejecutar el indexador una vez.You can switch to Once if you want to run the indexer one time. Haga clic en enviar para ejecutar el asistente y crear todos los objetos.Click Submit to run the wizard and create all objects. La indexación comienza inmediatamente.Indexing commences immediately.

Definición de indexador de COSMOS DBCosmos DB indexer definition

Puede supervisar la importación de datos en las páginas del portal.You can monitor data import in the portal pages. Las notificaciones de progreso indican el estado de la indexación y cuántos documentos se cargan.Progress notifications indicate indexing status and how many documents are uploaded.

Cuando se complete la indización, puede usar el Explorador de búsqueda para consultar el índice.When indexing is complete, you can use Search explorer to query your index.

Nota

Si no ve los datos esperados, necesita establecer más atributos en varios campos.If you don't see the data you expect, you might need to set more attributes on more fields. Eliminar el índice e indexador que acaba de crea y recorrer el Asistente para nuevo, modificar las selecciones para los atributos de índice en el paso 5.Delete the index and indexer you just created, and step through the wizard again, modifying your selections for index attributes in step 5.

Uso de API RESTUse REST APIs

Puede usar la API de REST para indexar los datos de Azure Cosmos DB, después de un flujo de trabajo de tres partes comunes a todos los indexadores de Azure Search: crear un origen de datos, crear un índice, cree un indexador.You can use the REST API to index Azure Cosmos DB data, following a three-part workflow common to all indexers in Azure Search: create a data source, create an index, create an indexer. Extracción de datos de almacenamiento de Cosmos tiene lugar cuando se envía la solicitud de creación de indizador.Data extraction from Cosmos storage occurs when you submit the Create Indexer request. Una vez finalizada esta solicitud, tendrá un índice consultable.After this request is finished, you will have a queryable index.

Si va a evaluar MongoDB, debe usar la API de REST para crear el origen de datos.If you are evaluating MongoDB, you must use the REST API to create the data source.

En la cuenta de Cosmos DB, puede elegir si desea que la recopilación indexe automáticamente todos los documentos.In your Cosmos DB account you can choose whether you want the collection to automatically index all documents. De forma predeterminada, todos los documentos se indexan automáticamente, pero puede desactivar la indexación automática.By default, all documents are automatically indexed, but you can turn off automatic indexing. Cuando se desactiva la indexación, solo se puede acceder a los documentos a través de sus propios vínculos o mediante su identificador.When indexing is turned off, documents can be accessed only through their self-links or by queries by using the document ID. Azure Search necesita que se active la indexación automática de Cosmos DB en la colección que Azure Search va a indexar.Azure Search requires Cosmos DB automatic indexing to be turned on in the collection that will be indexed by Azure Search.

Nota

Azure Cosmos DB es la siguiente generación de DocumentDB.Azure Cosmos DB is the next generation of DocumentDB. Aunque se cambie el nombre de producto, la sintaxis documentdb de los indexadores de Azure Search todavía existe en las páginas de Azure Portal y de las API de Azure Search para la compatibilidad con versiones anteriores.Although the product name is changed, the documentdb syntax in Azure Search indexers still exists for backwards compatibility in both the Azure Search APIs and portal pages. Cuando configure los indexadores, no olvide especificar la sintaxis documentdb tal como se indica en este artículo.When configuring indexers, be sure to specify the documentdb syntax as instructed in this article.

1 - ensamblar las entradas para la solicitud1 - Assemble inputs for the request

Para cada solicitud, debe proporcionar el nombre del servicio y la clave de administrador de Azure Search (en el encabezado POST) y el nombre de cuenta de almacenamiento y la clave para blob storage.For each request, you must provide the service name and admin key for Azure Search (in the POST header), and the storage account name and key for blob storage. Puede usar Postman para enviar solicitudes HTTP a Azure Search.You can use Postman to send HTTP requests to Azure Search.

Copie los cuatro valores siguientes en el Bloc de notas para que pueda pegarlos en una solicitud:Copy the following four values into Notepad so that you can paste them into a request:

  • Nombre del servicio Azure SearchAzure Search service name
  • Clave de administración de Azure SearchAzure Search admin key
  • Cadena de conexión de COSMOS DBCosmos DB connection string

Puede encontrar estos valores en el portal:You can find these values in the portal:

  1. En las páginas del portal de Azure Search, copie la dirección URL de servicio de búsqueda desde la página información general.In the portal pages for Azure Search, copy the search service URL from the Overview page.

  2. En el panel de navegación izquierdo, haga clic en claves y, a continuación, copie la clave principal o secundaria (son equivalentes).In the left navigation pane, click Keys and then copy either the primary or secondary key (they are equivalent).

  3. Cambiar a las páginas del portal para la cuenta de almacenamiento de Cosmos.Switch to the portal pages for your Cosmos storage account. En el panel de navegación izquierdo, bajo configuración, haga clic en claves.In the left navigation pane, under Settings, click Keys. Esta página proporciona un URI, dos conjuntos de cadenas de conexión, y dos conjuntos de claves.This page provides a URI, two sets of connection strings, and two sets of keys. En el Bloc de notas, copie una de las cadenas de conexión.Copy one of the connection strings to Notepad.

2 - Creación de un origen de datos2 - Create a data source

A origen de datos especifica los datos para indexar, las credenciales y las directivas para identificar cambios en los datos (por ejemplo, los documentos modificados o eliminados dentro de la colección).A data source specifies the data to index, credentials, and policies for identifying changes in the data (such as modified or deleted documents inside your collection). El origen de datos se define como un recurso independiente para que puedan usarlo múltiples indizadores.The data source is defined as an independent resource so that it can be used by multiple indexers.

Para crear un origen de datos, formular una solicitud POST:To create a data source, formulate a POST request:

POST https://[service name].search.windows.net/datasources?api-version=2017-11-11
Content-Type: application/json
api-key: [Search service admin key]

{
    "name": "mydocdbdatasource",
    "type": "documentdb",
    "credentials": {
        "connectionString": "AccountEndpoint=https://myCosmosDbEndpoint.documents.azure.com;AccountKey=myCosmosDbAuthKey;Database=myCosmosDbDatabaseId"
    },
    "container": { "name": "myCollection", "query": null },
    "dataChangeDetectionPolicy": {
        "@odata.type": "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
        "highWaterMarkColumnName": "_ts"
    }
}

El cuerpo de la solicitud contiene la definición del origen de datos, que debe incluir los siguientes campos:The body of the request contains the data source definition, which should include the following fields:

CampoField DESCRIPCIÓNDescription
namename Necesario.Required. Elija un nombre para representar el objeto de origen de datos.Choose any name to represent your data source object.
typetype Necesario.Required. Debe ser documentdb.Must be documentdb.
credentialscredentials Necesario.Required. Debe ser una cadena de conexión de Cosmos DB.Must be a Cosmos DB connection string.
Para las colecciones de SQL, las cadenas de conexión están en este formato: AccountEndpoint=<Cosmos DB endpoint url>;AccountKey=<Cosmos DB auth key>;Database=<Cosmos DB database id>For SQL collections, connection strings are in this format: AccountEndpoint=<Cosmos DB endpoint url>;AccountKey=<Cosmos DB auth key>;Database=<Cosmos DB database id>
Para las colecciones de MongoDB, agregue determinada = MongoDb a la cadena de conexión:For MongoDB collections, add ApiKind=MongoDb to the connection string:
AccountEndpoint=<Cosmos DB endpoint url>;AccountKey=<Cosmos DB auth key>;Database=<Cosmos DB database id>;ApiKind=MongoDb
Evite los números de puerto en la dirección URL del punto de conexión.Avoid port numbers in the endpoint url. Si incluye el número de puerto, Azure Search no podrá indexar la base de datos de Azure Cosmos DB.If you include the port number, Azure Search will be unable to index your Azure Cosmos DB database.
containercontainer contiene los siguientes elementos:Contains the following elements:
name: Necesario.name: Required. Especifique el identificador de la colección de base de datos que se puede indizar.Specify the ID of the database collection to be indexed.
query: Opcional.query: Optional. Puede especificar una consulta para acoplar un documento JSON arbitrario en un esquema plano que Azure Search pueda indizar.You can specify a query to flatten an arbitrary JSON document into a flat schema that Azure Search can index.
Para las colecciones de MongoDB, no se admiten las consultas.For MongoDB collections, queries are not supported.
dataChangeDetectionPolicydataChangeDetectionPolicy Se recomienda su uso.Recommended. Consulte la sección Indexación de documentos modificados.See Indexing Changed Documents section.
dataDeletionDetectionPolicydataDeletionDetectionPolicy Opcional.Optional. Consulte la sección Indexación de documentos eliminados.See Indexing Deleted Documents section.

Uso de consultas para dar forma a los datos indizadosUsing queries to shape indexed data

Puede especificar una consulta de SQL para eliminar el formato de las propiedades o matrices anidadas y de las propiedades JSON del proyecto, y para filtrar los datos que se van a indexar.You can specify a SQL query to flatten nested properties or arrays, project JSON properties, and filter the data to be indexed.

Advertencia

No se admiten consultas personalizadas para colecciones de MongoDB: el parámetro container.query debe establecerse en null u omitirse.Custom queries are not supported for MongoDB collections: container.query parameter must be set to null or omitted. Si tiene que usar una consulta personalizada, háganoslo saber en User Voice.If you need to use a custom query, please let us know on User Voice.

Documento de ejemplo:Example document:

{
    "userId": 10001,
    "contact": {
        "firstName": "andy",
        "lastName": "hoh"
    },
    "company": "microsoft",
    "tags": ["azure", "documentdb", "search"]
}

Consulta de filtro:Filter query:

SELECT * FROM c WHERE c.company = "microsoft" and c._ts >= @HighWaterMark ORDER BY c._ts

Consulta sin formato:Flattening query:

SELECT c.id, c.userId, c.contact.firstName, c.contact.lastName, c.company, c._ts FROM c WHERE c._ts >= @HighWaterMark ORDER BY c._ts

Consulta de proyección:Projection query:

SELECT VALUE { "id":c.id, "Name":c.contact.firstName, "Company":c.company, "_ts":c._ts } FROM c WHERE c._ts >= @HighWaterMark ORDER BY c._ts

Consulta sin formato de matriz:Array flattening query:

SELECT c.id, c.userId, tag, c._ts FROM c JOIN tag IN c.tags WHERE c._ts >= @HighWaterMark ORDER BY c._ts

3 - Creación de un índice de búsqueda de destino3 - Create a target search index

Crear un índice de búsqueda de Azure de destino si aún no tiene uno.Create a target Azure Search index if you don’t have one already. El ejemplo siguiente crea un índice con un campo de identificador y la descripción:The following example creates an index with an ID and description field:

POST https://[service name].search.windows.net/indexes?api-version=2017-11-11
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,
     "sortable": false,
     "facetable": false,
     "suggestions": true
   }]
 }

Asegúrese de que el esquema del índice de destino es compatible con el de los documentos JSON de origen o el resultado de la proyección de consultas personalizada.Ensure that the schema of your target index is compatible with the schema of the source JSON documents or the output of your custom query projection.

Nota

Para las colecciones particionadas, la clave de documento predeterminada es la propiedad _rid de Azure Cosmos DB, para la que Azure Search cambia el nombre automáticamente a rid, porque los nombres de los campos no pueden comenzar con un carácter de guion bajo.For partitioned collections, the default document key is Azure Cosmos DB's _rid property, which Azure Search automatically renames to rid because field names cannot start with an undescore character. Además, los valores _rid de Azure Cosmos DB contienen caracteres que no son válidos en las claves de Azure Search.Also, Azure Cosmos DB _rid values contain characters that are invalid in Azure Search keys. Por este motivo, la _rid valores están codificados con Base64.For this reason, the _rid values are Base64 encoded.

Para las colecciones de MongoDB, Azure Search cambia el nombre de la propiedad _id automáticamente a doc_id.For MongoDB collections, Azure Search automatically renames the _id property to doc_id.

asignación entre tipos de datos de JSON y de Azure SearchMapping between JSON Data Types and Azure Search Data Types

Tipo de datos de JSONJSON data type Tipos de campos de índice de destino compatiblesCompatible target index field types
BoolBool Edm.Boolean, Edm.StringEdm.Boolean, Edm.String
Números que parecen enterosNumbers that look like integers Edm.Int32, Edm.Int64, Edm.StringEdm.Int32, Edm.Int64, Edm.String
Números que parecen puntos flotantesNumbers that look like floating-points Edm.Double, Edm.StringEdm.Double, Edm.String
stringString Edm.StringEdm.String
Matrices de tipos primitivos, por ejemplo ["a", "b", "c"]Arrays of primitive types, for example ["a", "b", "c"] Collection(Edm.String)Collection(Edm.String)
Cadenas que parecen fechasStrings that look like dates Edm.DateTimeOffset, Edm.StringEdm.DateTimeOffset, Edm.String
Objetos GeoJSON, por ejemplo {"type": "Point", "coordinates": [long, lat] }GeoJSON objects, for example { "type": "Point", "coordinates": [long, lat] } Edm.GeographyPointEdm.GeographyPoint
Otros objetos JSONOther JSON objects N/DN/A

4: configurar y ejecutar el indexador4 - Configure and run the indexer

Una vez creados el origen de datos y los índices, ya podrá crear el indizador:Once the index and data source have been created, you're ready to create the indexer:

POST https://[service name].search.windows.net/indexers?api-version=2017-11-11
Content-Type: application/json
api-key: [admin key]

{
  "name" : "mydocdbindexer",
  "dataSourceName" : "mydocdbdatasource",
  "targetIndexName" : "mysearchindex",
  "schedule" : { "interval" : "PT2H" }
}

Este indexador se ejecuta cada dos horas (el intervalo de programación se establece en "PT2H").This indexer runs every two hours (schedule interval is set to "PT2H"). Para ejecutar un indizador cada 30 minutos, establézcalo en PT30M.To run an indexer every 30 minutes, set the interval to "PT30M". El intervalo más breve que se admite es de 5 minutos.The shortest supported interval is 5 minutes. La programación es opcional: si se omite, el indizador solo se ejecuta una vez cuando se crea.The schedule is optional - if omitted, an indexer runs only once when it's created. Sin embargo, puede ejecutarlo a petición en cualquier momento.However, you can run an indexer on-demand at any time.

Para más información sobre la API Create Indexer, consulte Crear indexador.For more details on the Create Indexer API, check out Create Indexer.

Uso de .NETUse .NET

El SDK de .NET totalmente tiene paridad completa con la API REST.The .NET SDK has fully parity with the REST API. Se recomienda que revise la sección anterior de la API REST para obtener información sobre los conceptos, el flujo de trabajo y los requisitos.We recommend that you review the previous REST API section to learn concepts, workflow, and requirements. A continuación, puede consultar la siguiente documentación de referencia de la API de .NET para implementar un indizador JSON en código administrado.You can then refer to following .NET API reference documentation to implement a JSON indexer in managed code.

Indexación de documentos modificadosIndexing changed documents

El fin de una directiva de detección de cambios de datos es identificar de forma eficaz los elementos de datos que han cambiado.The purpose of a data change detection policy is to efficiently identify changed data items. Actualmente, High Water Mark es la única directiva compatible que usa la propiedad _ts (marca de tiempo) que proporciona Azure Cosmos DB, y se especifica de la siguiente forma:Currently, the only supported policy is the High Water Mark policy using the _ts (timestamp) property provided by Azure Cosmos DB, which is specified as follows:

{
    "@odata.type" : "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
    "highWaterMarkColumnName" : "_ts"
}

Se recomienda encarecidamente usar esta directiva para garantizar un buen rendimiento del indexador.Using this policy is highly recommended to ensure good indexer performance.

Si usa una consulta personalizada, asegúrese de que la consulta proyecta la propiedad _ts.If you are using a custom query, make sure that the _ts property is projected by the query.

Progreso incremental y consultas personalizadasIncremental progress and custom queries

El progreso incremental durante la indexación garantiza que si se interrumpe la ejecución del indexador por errores transitorios o por el límite de tiempo de ejecución, dicho indexador puede retomar la ejecución por donde la dejó la próxima vez que se ejecute, en lugar de tener que volver a indexar toda la colección desde el principio.Incremental progress during indexing ensures that if indexer execution is interrupted by transient failures or execution time limit, the indexer can pick up where it left off next time it runs, instead of having to reindex the entire collection from scratch. Esto es especialmente importante cuando se indexan colecciones grandes.This is especially important when indexing large collections.

Para habilitar el progreso incremental cuando se usa una consulta personalizada, asegúrese de que la consulta ordena los resultados por la columna _ts.To enable incremental progress when using a custom query, ensure that your query orders the results by the _ts column. Esto permite la creación de puntos de comprobación, que Azure Search usa para proporcionar el progreso incremental en presencia de errores.This enables periodic check-pointing that Azure Search uses to provide incremental progress in the presence of failures.

En algunos casos, incluso si la consulta contiene una cláusula ORDER BY [collection alias]._ts, Azure Search puede no deducir que la consulta se ordene por _ts.In some cases, even if your query contains an ORDER BY [collection alias]._ts clause, Azure Search may not infer that the query is ordered by the _ts. Puede indicar a Azure Search que los resultados se ordenen mediante el uso de la propiedad de configuración assumeOrderByHighWaterMarkColumn.You can tell Azure Search that results are ordered by using the assumeOrderByHighWaterMarkColumn configuration property. Para especificar esta sugerencia, cree o actualice el indexador como se indica a continuación:To specify this hint, create or update your indexer as follows:

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

Indexación de documentos eliminadosIndexing deleted documents

Cuando se eliminan filas de la recopilación, lo habitual es que también se deseen eliminar del índice de búsqueda.When rows are deleted from the collection, you normally want to delete those rows from the search index as well. El fin de una directiva de detección de eliminación de datos es identificar eficazmente los elementos de datos eliminados.The purpose of a data deletion detection policy is to efficiently identify deleted data items. Actualmente, solo es compatible la directiva Soft Delete (la eliminación se indica con algún tipo de marca), especificada de la siguiente forma:Currently, the only supported policy is the Soft Delete policy (deletion is marked with a flag of some sort), which is specified as follows:

{
    "@odata.type" : "#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",
    "softDeleteColumnName" : "the property that specifies whether a document was deleted",
    "softDeleteMarkerValue" : "the value that identifies a document as deleted"
}

Si usa una consulta personalizada, asegúrese de que la consulta proyecta la propiedad a la que softDeleteColumnName hace referencia.If you are using a custom query, make sure that the property referenced by softDeleteColumnName is projected by the query.

En el ejemplo siguiente se crea un origen de datos con una directiva de eliminación temporal:The following example creates a data source with a soft-deletion policy:

POST https://[service name].search.windows.net/datasources?api-version=2017-11-11
Content-Type: application/json
api-key: [Search service admin key]

{
    "name": "mydocdbdatasource",
    "type": "documentdb",
    "credentials": {
        "connectionString": "AccountEndpoint=https://myDocDbEndpoint.documents.azure.com;AccountKey=myDocDbAuthKey;Database=myDocDbDatabaseId"
    },
    "container": { "name": "myDocDbCollectionId" },
    "dataChangeDetectionPolicy": {
        "@odata.type": "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
        "highWaterMarkColumnName": "_ts"
    },
    "dataDeletionDetectionPolicy": {
        "@odata.type": "#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",
        "softDeleteColumnName": "isDeleted",
        "softDeleteMarkerValue": "true"
    }
}

Vea este vídeoWatch this video

En este vídeo de 7 minutos ligeramente más antiguo, Azure Cosmos DB programa Andrew Liu, administrador, se muestra cómo agregar un índice de Azure Search a un contenedor de Azure Cosmos DB.In this slightly older 7-minute video, Azure Cosmos DB Program Manager Andrew Liu demonstrates how to add an Azure Search index to an Azure Cosmos DB container. Las páginas del portal que se muestra en el vídeo no están actualizadas, pero la información sigue siendo pertinente.The portal pages shown in the video are outdated, but the information is still relevant.

Pasos siguientesNext steps

Felicidades.Congratulations! En este artículo, aprendió a integrar Azure Cosmos DB con Azure Search con un indexador.You have learned how to integrate Azure Cosmos DB with Azure Search using an indexer.