Como indexar Cosmos DB usando um indexador de Azure SearchHow to index Cosmos DB using an Azure Search indexer

Observação

O suporte à API do MongoDB está em versão prévia e não se destina ao uso em produção.MongoDB API support is in preview and not intended for production use. A API REST versão 2019-05-06-versão prévia fornece esse recurso.The REST API version 2019-05-06-Preview provides this feature. Não há suporte para Portal ou SDK do .NET no momento.There is no portal or .NET SDK support at this time.

A API do SQL está geralmente disponível.SQL API is generally available.

Este artigo mostra como configurar um indexador Azure Cosmos DB para extrair conteúdo e torná-lo pesquisável no 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 fluxo de trabalho cria um índice de Azure Search e o carrega com o texto existente extraído do Azure Cosmos DB.This workflow creates an Azure Search index and loads it with existing text extracted from Azure Cosmos DB.

Como a terminologia pode ser confusa, vale a pena observar que Azure Cosmos DB indexação e a indexação de Azure Search são operações distintas, exclusivas para cada serviço.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 iniciar a indexação de Azure Search, seu banco de dados Azure Cosmos DB já deve existir e conter dados.Before you start Azure Search indexing, your Azure Cosmos DB database must already exist and contain data.

Você pode usar o portal, as APIs REST ou o SDK do .net para indexar o conteúdo do cosmos.You can use the portal, REST APIs, or .NET SDK to index Cosmos content. O indexador Cosmos DB no Azure Search pode rastrear itens Cosmos do Azure acessados por meio desses protocolos:The Cosmos DB indexer in Azure Search can crawl Azure Cosmos items accessed through these protocols:

Observação

A voz do usuário tem itens existentes para suporte adicional à API.User Voice has existing items for additional API support. Você pode converter um voto para as APIs do cosmos que você gostaria de ver com suporte no Azure Search: API de tabela, API do Graph API do Apache Cassandra.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.

Usar o portalUse the portal

O método mais fácil para indexação de itens de Cosmos do Azure é usar um assistente no portal do Azure.The easiest method for indexing Azure Cosmos items is to use a wizard in the Azure portal. Por amostragem de dados e leitura de metadados no contêiner, o assistente de importação de dados no Azure Search pode criar um índice padrão, mapear campos de origem para campos de índice de destino e carregar o índice em uma única operação.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. Dependendo do tamanho e complexidade da fonte de dados, é possível ter um índice de pesquisa de texto completo operando em minutos.Depending on the size and complexity of source data, you could have an operational full text search index in minutes.

É recomendável usar a mesma assinatura do Azure para Azure Search e Azure Cosmos DB, preferencialmente na mesma região.We recommend using the same Azure subscription for both Azure Search and Azure Cosmos DB, preferably in the same region.

1- Preparar dados de origem1 - Prepare source data

Você deve ter uma conta Cosmos, um banco de dados Cosmos do Azure mapeado para a API do SQL ou a API do MongoDB e um contêiner 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.

Certifique-se de que seu banco de dados do Cosmos DB contenha dado.Make sure your Cosmos DB database contains data. O Assistente de importação de dados lê metadados e executa a amostragem de dados para inferir um esquema de índice, mas também carrega dados 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. Se os dados estiverem ausentes, o assistente parará com esse erro "erro ao detectar o esquema de índice da fonte de dados: Não foi possível compilar um índice de protótipo porque a fonte de dados ' emptycollection ' não retornou nenhum dado ".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 - Iniciar o Assistente para Importação de Dados 2 - Start Import data wizard

Você pode iniciar o assistente na barra de comandos na página Azure Search serviço ou clicando em Adicionar Azure Search na seção configurações do painel de navegação esquerdo da sua conta de armazenamento.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 Importação de dados no portalImport data command in portal

3 - Configurar a fonte de dados3 - Set the data source

Observação

No momento, não é possível criar ou editar fontes de dados do MongoDB usando portal do Azure ou o SDK do .net.Currently, you cannot create or edit MongoDB data sources using Azure portal or the .NET SDK. No entanto, você pode monitorar o histórico de execução de indexadores do MongoDB no portal.However, you can monitor execution history of MongoDB indexers in the portal.

Na página fonte de dados , a origem deve ser Cosmos DB, com as seguintes especificações:In the data source page, the source must be Cosmos DB, with the following specifications:

  • Nome é o nome do objeto de fonte de dados.Name is the name of the data source object. Depois de criado, você pode escolher para outras cargas de trabalho.Once created, you can choose it for other workloads.

  • A conta de Cosmos DB deve ser a cadeia de conexão primária ou secundária do cosmos DB AccountEndpoint , com AccountKeyum e um.Cosmos DB account should be the primary or secondary connection string from Cosmos DB, with an AccountEndpoint and an AccountKey. A conta determina se os dados são convertidos como API do SQL ou API do Mongo DBThe account determines whether data is cast as SQL API or Mongo DB API

  • Banco de dados é um banco de dados existente da conta.Database is an existing database from the account.

  • A coleção é um contêiner de documentos.Collection is a container of documents. Os documentos devem existir para que a importação seja realizada com sucesso.Documents must exist in order for import to succeed.

  • A consulta poderá ficar em branco se você quiser todos os documentos, caso contrário, poderá inserir uma consulta que selecione um subconjunto de documentos.Query can be blank if you want all documents, otherwise you can input a query that selects a document subset.

    ![Cosmos DB definição de fonte de dados] (media/search-howto-index-cosmosdb/cosmosdb-datasource.png "Cosmos DB definição de fonte de dados")Cosmos DB data source definition

4 - Pular a página de "Adicionar a pesquisa cognitiva" no assistente4 - Skip the "Add cognitive search" page in the wizard

Adicionar habilidades cognitivas não é necessário para a importação de documentos.Adding cognitive skills is not necessary for document import. A menos que haja uma necessidade específica de incluir a API de Serviços Cognitivos e transformações ao seu pipeline de indexação, ignore esta etapa.Unless you have a specific need to include Cognitive Services APIs and transformations to your indexing pipeline, you should skip this step.

Para ignorar a etapa, primeiro vá para a próxima página.To skip the step, first go to the next page.

Botão Próxima página da pesquisa cognitiva

Nessa página, você pode pular para a personalização do índice.From that page you can skip ahead to index customization.

Ignorar etapa de habilidades cognitivas

5- Definir atributos de índice5 - Set index attributes

Na página índice, deve haver uma lista de campos com um tipo de dados e uma série de caixas de seleção para definir os atributos de í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. O assistente pode gerar uma lista de campos com base em metadados e por amostragem dos dados de origem.The wizard can generate a fields list based on metadata and by sampling the source data.

Você pode selecionar atributos em massa clicando na caixa de seleção na parte superior de uma coluna de atributo.You can bulk-select attributes by clicking the checkbox at the top of an attribute column. Escolha recuperável e pesquisável para cada campo que deve ser retornado a um aplicativo cliente e sujeito ao processamento de pesquisa 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. Você observará que inteiros não são de texto completo ou de pesquisa difusa (os números são avaliados de forma idêntica e geralmente são úteis em filtros).You'll notice that integers are not full text or fuzzy searchable (numbers are evaluated verbatim and are often useful in filters).

Examine a descrição de atributos de índice e analisadores de idioma para obter mais informações.Review the description of index attributes and language analyzers for more information.

Reserve um tempo para revisar suas seleções.Take a moment to review your selections. Depois de executar o assistente, estruturas de dados físicos são criadas e você não poderá editar esses campos sem descartar e recriar todos os 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.

![Definição de índice de Cosmos DB] (media/search-howto-index-cosmosdb/cosmosdb-index-schema.png "Definição de índice de Cosmos DB")Cosmos DB index definition

6 - Criar indexador6 - Create indexer

Totalmente especificado, o assistente cria três objetos diferentes em seu serviço de pesquisa.Fully specified, the wizard creates three distinct objects in your search service. Um objeto de fonte de dados e um objeto de índice são salvos como recursos nomeados do serviço Azure Search.A data source object and index object are saved as named resources in your Azure Search service. A última etapa cria um objeto do indexador.The last step creates an indexer object. Dar um nome ao indexador permite que ele exista como um recurso autônomo, que pode ser agendado e gerenciado independentemente do objeto de fonte de dados e índice criado na mesma sequência do assistente.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.

Se você não estiver familiarizado com indexadores, um indexador é um recurso no Azure Search que rastreia uma fonte de dados externa para o conteúdo pesquisável.If you are not familiar with indexers, an indexer is a resource in Azure Search that crawls an external data source for searchable content. A saída do assistente de importação de dados é um indexador que rastreia sua fonte de dados Cosmos DB, extrai o conteúdo pesquisável e o importa para um índice em 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.

A captura de tela a seguir mostra a configuração padrão do indexador.The following screenshot shows the default indexer configuration. Você pode alternar para uma vez se quiser executar o indexador uma vez.You can switch to Once if you want to run the indexer one time. Clique em Enviar para executar o assistente e criar todos os objetos.Click Submit to run the wizard and create all objects. A indexação começa imediatamente.Indexing commences immediately.

![Cosmos DB definição do indexador] (media/search-howto-index-cosmosdb/cosmosdb-indexer.png "Cosmos DB definição do indexador")Cosmos DB indexer definition

Pode-se monitorar a importação de dados nas páginas do portal.You can monitor data import in the portal pages. As notificações de progresso indicam o status da indexação e quantos documentos são carregados.Progress notifications indicate indexing status and how many documents are uploaded.

Quando a indexação estiver concluída, você pode usar o Search explorer para consultar seu índice.When indexing is complete, you can use Search explorer to query your index.

Observação

Se você não vir os dados esperados, talvez seja necessário definir mais atributos em mais campos.If you don't see the data you expect, you might need to set more attributes on more fields. Exclua o índice e o indexador que você acabou de criar e percorra o assistente novamente, modificando suas seleções de atributos de índice na etapa 5.Delete the index and indexer you just created, and step through the wizard again, modifying your selections for index attributes in step 5.

Usar APIs RESTUse REST APIs

Você pode usar a API REST para indexar Azure Cosmos DB dados, seguindo um fluxo de trabalho de três partes comum a todos os indexadores no Azure Search: criar uma fonte de dados, criar um índice, criar um 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. A extração de dados do armazenamento Cosmos ocorre quando você envia a solicitação criar indexador.Data extraction from Cosmos storage occurs when you submit the Create Indexer request. Depois que essa solicitação for concluída, você terá um índice passível de consulta.After this request is finished, you will have a queryable index.

Se você estiver avaliando o MongoDB, deverá usar o api-version=2019-05-06-Preview restante para criar a fonte de dados.If you are evaluating MongoDB, you must use the REST api-version=2019-05-06-Preview to create the data source.

Na sua conta do Cosmos DB, você pode escolher se deseja que a coleção indexe automaticamente todos os documentos.In your Cosmos DB account you can choose whether you want the collection to automatically index all documents. Por padrão, todos os documentos são indexados automaticamente, mas você pode desligar a indexação automática.By default, all documents are automatically indexed, but you can turn off automatic indexing. Quando a indexação estiver desativada, os documentos poderão ser acessados somente através de self-links ou por meio de consultas usando a ID do documento.When indexing is turned off, documents can be accessed only through their self-links or by queries by using the document ID. O Azure Search exige a indexação para ser ativado na coleção será indexada pelo Azure Search automática do Cosmos DB.Azure Search requires Cosmos DB automatic indexing to be turned on in the collection that will be indexed by Azure Search.

Aviso

O Azure Cosmos DB é a próxima geração do DocumentDB.Azure Cosmos DB is the next generation of DocumentDB. Anteriormente, com a versão 2017-11-11 da API, documentdb você poderia usar a sintaxe.Previously with API version 2017-11-11 you could use the documentdb syntax. Isso significa que você pode especificar o tipo de fonte de cosmosdb dados documentdbcomo ou.This meant that you could specify your data source type as cosmosdb or documentdb. A partir da versão de API 2019-05-06 , o portal e as APIs de cosmosdb Azure Search só dão suporte à sintaxe conforme instruído neste artigo.Starting with API version 2019-05-06 both the Azure Search APIs and Portal only support the cosmosdb syntax as instructed in this article. Isso significa que o tipo de fonte de cosmosdb dados deve se você quiser se conectar a um ponto de extremidade Cosmos DB.This means that the data source type must cosmosdb if you would like to connect to a Cosmos DB endpoint.

1-montar entradas para a solicitação1 - Assemble inputs for the request

Para cada solicitação, você deve fornecer o nome do serviço e a chave de administração para Azure Search (no cabeçalho da POSTAgem) e o nome da conta de armazenamento e a chave para o armazenamento de BLOBs.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. Você pode usar o postmaster para enviar solicitações HTTP para Azure Search.You can use Postman to send HTTP requests to Azure Search.

Copie os quatro valores a seguir no bloco de notas para que você possa colá-los em uma solicitação:Copy the following four values into Notepad so that you can paste them into a request:

  • Nome do serviço de Azure SearchAzure Search service name
  • Azure Search chave de administraçãoAzure Search admin key
  • Cosmos DB cadeia de conexãoCosmos DB connection string

Você pode encontrar esses valores no Portal:You can find these values in the portal:

  1. Nas páginas do portal para Azure Search, copie a URL do serviço de pesquisa da página Visão geral.In the portal pages for Azure Search, copy the search service URL from the Overview page.

  2. No painel de navegação esquerdo, clique em chaves e copie a chave primária ou secundária (elas são equivalentes).In the left navigation pane, click Keys and then copy either the primary or secondary key (they are equivalent).

  3. Alterne para as páginas do portal para sua conta de armazenamento do cosmos.Switch to the portal pages for your Cosmos storage account. No painel de navegação à esquerda, em configurações, clique em chaves.In the left navigation pane, under Settings, click Keys. Esta página fornece um URI, dois conjuntos de cadeias de conexão e dois conjuntos de chaves.This page provides a URI, two sets of connection strings, and two sets of keys. Copie uma das cadeias de conexão para o bloco de notas.Copy one of the connection strings to Notepad.

2-criar uma fonte de dados2 - Create a data source

A fonte de dados especifica os dados no índice, nas credenciais e nas políticas para identificação de alterações nos dados (como documentos modificados ou excluídos em sua coleção).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). A fonte de dados é definida como um recurso independente para que possa ser usada por vários indexadores.The data source is defined as an independent resource so that it can be used by multiple indexers.

Para criar uma fonte de dados, formule uma solicitação POST:To create a data source, formulate a POST request:

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

{
    "name": "mycosmosdbdatasource",
    "type": "cosmosdb",
    "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"
    }
}

O corpo da solicitação contém a definição da fonte de dados, que deve incluir os seguintes campos:The body of the request contains the data source definition, which should include the following fields:

CampoField DescriçãoDescription
namename Obrigatório.Required. Escolha qualquer nome para representar o objeto de fonte de dados.Choose any name to represent your data source object.
typetype Obrigatório.Required. Deve ser cosmosdb.Must be cosmosdb.
credentialscredentials Obrigatório.Required. Deve ser uma cadeia de conexão Cosmos DB.Must be a Cosmos DB connection string.
Para coleções SQL, as cadeias de conexão estão neste 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 coleções do MongoDB, adicione ApiKind = MongoDB à cadeia de conexão: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 números de porta na url do ponto de extremidade.Avoid port numbers in the endpoint url. Se você incluir o número da porta, o Azure Search não poderá indexar seu banco de dados do Azure Cosmos DB.If you include the port number, Azure Search will be unable to index your Azure Cosmos DB database.
contêinercontainer Contém os seguintes elementos:Contains the following elements:
nome: Obrigatório.name: Required. Especifique a ID da coleção de banco de dados a ser indexada.Specify the ID of the database collection to be indexed.
query: Opcional.query: Optional. Você pode especificar uma consulta para nivelar um documento JSON arbitrário, criando um esquema nivelado que o Azure Search pode indexar.You can specify a query to flatten an arbitrary JSON document into a flat schema that Azure Search can index.
Para coleções do MongoDB, não há suporte para consultas.For MongoDB collections, queries are not supported.
dataChangeDetectionPolicydataChangeDetectionPolicy Recomendável.Recommended. Consulte a seção Indexando documentos alterados.See Indexing Changed Documents section.
dataDeletionDetectionPolicydataDeletionDetectionPolicy Opcional.Optional. Consulte a seção Indexando documentos excluídos.See Indexing Deleted Documents section.

Usando consultas para formatar dados indexadosUsing queries to shape indexed data

É possível especificar uma consulta do SQL para mesclar propriedades ou matrizes aninhadas, projetar propriedades JSON e filtrar os dados a serem indexados.You can specify a SQL query to flatten nested properties or arrays, project JSON properties, and filter the data to be indexed.

Aviso

Não há suporte para consultas personalizadas para coleções MongoDB : container.query o parâmetro deve ser definido como nulo ou omitido.Custom queries are not supported for MongoDB collections: container.query parameter must be set to null or omitted. Se você precisar usar uma consulta personalizada, informe em Voz do Usuário.If you need to use a custom query, please let us know on User Voice.

Documento de exemplo:Example document:

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

Filtrar consulta:Filter query:

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

Consulta de mesclagem: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 projeção: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 de mesclagem 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-criar um índice de pesquisa de destino3 - Create a target search index

Crie um índice de Azure Search de destino se você ainda não tiver um.Create a target Azure Search index if you don’t have one already. O exemplo a seguir cria um índice com um campo de ID e descrição:The following example creates an index with an ID and description field:

POST https://[service name].search.windows.net/indexes?api-version=2019-05-06
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
   }]
 }

Verifique se o esquema do índice de destino é compatível com o esquema dos documentos JSON de origem ou com a saída da projeção de consulta 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.

Observação

Para as coleções particionadas, a chave de documento padrão é a propriedade do Azure Cosmos DB _rid, que o Azure Search renomeia automaticamente a rid porque os nomes de campo não podem começar com um caractere sublinhado.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. Além disso, os valores _rid do Azure Cosmos DB contêm caracteres que são inválidos nas chaves do Azure Search.Also, Azure Cosmos DB _rid values contain characters that are invalid in Azure Search keys. Por esse motivo, os valores _rid são codificados em Base64.For this reason, the _rid values are Base64 encoded.

Para coleções do MongoDB, o Azure Search automaticamente renomeia a _id propriedade para doc_id.For MongoDB collections, Azure Search automatically renames the _id property to doc_id.

Mapeamento entre tipos de dados JSON e tipos de dados do Azure SearchMapping between JSON Data Types and Azure Search Data Types

Tipo de dados JSONJSON data type Tipos de campos de índice de destino compatíveisCompatible target index field types
BoolBool Edm.Boolean, Edm.StringEdm.Boolean, Edm.String
Números que se parecem com inteirosNumbers that look like integers Edm.Int32, Edm.Int64, Edm.StringEdm.Int32, Edm.Int64, Edm.String
Números que se parecem com pontos flutuantesNumbers that look like floating-points Edm.Double, Edm.StringEdm.Double, Edm.String
CadeiaString Edm.StringEdm.String
Matrizes de tipos primitivos, por exemplo, [“a”, “b”, “c”]Arrays of primitive types, for example ["a", "b", "c"] Collection(Edm.String)Collection(Edm.String)
Cadeias de caracteres que se parecem com datasStrings that look like dates Edm.DateTimeOffset, Edm.StringEdm.DateTimeOffset, Edm.String
Objetos GeoJSON, por exemplo, {"type": "Point", "coordinates": [long, lat] }GeoJSON objects, for example { "type": "Point", "coordinates": [long, lat] } Edm.GeographyPointEdm.GeographyPoint
Outros objetos JSONOther JSON objects N/DN/A

4-configurar e executar o indexador4 - Configure and run the indexer

Uma vez que o índice e a fonte de dados forem criados, será possível criar o indexador: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=2019-05-06
Content-Type: application/json
api-key: [admin key]

{
  "name" : "mycosmosdbindexer",
  "dataSourceName" : "mycosmosdbdatasource",
  "targetIndexName" : "mysearchindex",
  "schedule" : { "interval" : "PT2H" }
}

Esse indexador é executado a cada duas horas (o intervalo de agendamento é definido como "PT2H").This indexer runs every two hours (schedule interval is set to "PT2H"). Para executar um indexador a cada 30 minutos, defina o intervalo para "PT30M".To run an indexer every 30 minutes, set the interval to "PT30M". O intervalo mais curto com suporte é de 5 minutos.The shortest supported interval is 5 minutes. O agendamento é opcional – se ele for omitido, um indexador será executado apenas uma vez quando for criado.The schedule is optional - if omitted, an indexer runs only once when it's created. No entanto, você pode executar um indexador sob demanda a qualquer momento.However, you can run an indexer on-demand at any time.

Para saber mais sobre a API Criar Indexador, veja Criar indexador.For more details on the Create Indexer API, check out Create Indexer.

Para obter mais informações sobre como definir agendas do indexador, consulte como agendar indexadores para Azure Search.For more information about defining indexer schedules see How to schedule indexers for Azure Search.

Usar o .NETUse .NET

O SDK do .NET disponível para o público geral tem paridade total com a API REST disponível.The generally available .NET SDK has full parity with the generally available REST API. É recomendável examinar a seção anterior da API REST para aprender os conceitos, fluxo de trabalho e requisitos.We recommend that you review the previous REST API section to learn concepts, workflow, and requirements. Consulte a seguinte documentação de referência de API do .NET para implementar um indexador JSON em código gerenciado.You can then refer to following .NET API reference documentation to implement a JSON indexer in managed code.

Indexando documentos alteradosIndexing changed documents

A finalidade de uma política de detecção de alteração de dados é identificar de maneira eficaz dados alterados.The purpose of a data change detection policy is to efficiently identify changed data items. Atualmente, a única política com suporte é a política High Water Mark que usa a propriedade _ts (carimbo de data/hora) fornecida pelo Azure Cosmos DB, que é especificada da seguinte maneira: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"
}

O uso dessa política é altamente recomendável para garantir o bom desempenho do indexador.Using this policy is highly recommended to ensure good indexer performance.

Se estiver usando uma consulta personalizada, garanta que a propriedade _ts será projetada pela consulta.If you are using a custom query, make sure that the _ts property is projected by the query.

Progresso incremental e consultas personalizadasIncremental progress and custom queries

O progresso incremental durante a indexação garante que, se a execução do indexador é interrompida por falhas transitórias ou limite de tempo de execução, o indexador pode escolher onde ela parou próxima vez que ele é executado, em vez de toda a coleção de zero de índice novamente.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. Isso é especialmente importante durante a indexação de coleções grandes.This is especially important when indexing large collections.

Para habilitar o progresso incremental usando uma consulta personalizada, certifique-se de que sua consulta classifica os resultados pelo _ts coluna.To enable incremental progress when using a custom query, ensure that your query orders the results by the _ts column. Isso permite periódica seleção apontando que usa o Azure Search para fornecer o progresso incremental na presença de falhas.This enables periodic check-pointing that Azure Search uses to provide incremental progress in the presence of failures.

Em alguns casos, mesmo se a consulta contiver uma cláusula ORDER BY [collection alias]._ts, Azure Search pode não inferir que a consulta é solicitada pelo _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. Você pode informar o Azure Search que os resultados são ordenados usando o assumeOrderByHighWaterMarkColumn propriedade de configuração.You can tell Azure Search that results are ordered by using the assumeOrderByHighWaterMarkColumn configuration property. Para especificar essa dica, crie ou atualize o indexador da seguinte maneira:To specify this hint, create or update your indexer as follows:

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

Indexando documentos excluídosIndexing deleted documents

Quando as linhas são excluídas da coleção, normalmente, você também deseja excluí-las do índice de pesquisa.When rows are deleted from the collection, you normally want to delete those rows from the search index as well. A finalidade de uma política de detecção de exclusão de dados é identificar de maneira eficaz dados excluídos.The purpose of a data deletion detection policy is to efficiently identify deleted data items. Atualmente, a única política com suporte é a política Soft Delete (a exclusão recebe algum tipo de marcador), que é especificada da seguinte 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"
}

Se estiver usando uma consulta personalizada, garanta que a propriedade referenciada por softDeleteColumnName é projetada pela consulta.If you are using a custom query, make sure that the property referenced by softDeleteColumnName is projected by the query.

O seguinte exemplo cria uma fonte de dados com uma política de exclusão reversível:The following example creates a data source with a soft-deletion policy:

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

{
    "name": "mycosmosdbdatasource",
    "type": "cosmosdb",
    "credentials": {
        "connectionString": "AccountEndpoint=https://myCosmosDbEndpoint.documents.azure.com;AccountKey=myCosmosDbAuthKey;Database=myCosmosDbDatabaseId"
    },
    "container": { "name": "myCosmosDbCollectionId" },
    "dataChangeDetectionPolicy": {
        "@odata.type": "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
        "highWaterMarkColumnName": "_ts"
    },
    "dataDeletionDetectionPolicy": {
        "@odata.type": "#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",
        "softDeleteColumnName": "isDeleted",
        "softDeleteMarkerValue": "true"
    }
}

Próximas etapasNext steps

Parabéns!Congratulations! Você aprendeu a integrar o Azure Cosmos DB ao Azure Search usando um indexador.You have learned how to integrate Azure Cosmos DB with Azure Search using an indexer.