Como recriar um índice no Azure Pesquisa CognitivaHow to rebuild an index in Azure Cognitive Search

Este artigo explica como recriar um índice de Pesquisa Cognitiva do Azure, as circunstâncias sob as quais as recompilações são necessárias e recomendações para mitigar o impacto de recompilações em solicitações de consulta em andamento.This article explains how to rebuild an Azure Cognitive Search index, the circumstances under which rebuilds are required, and recommendations for mitigating the impact of rebuilds on ongoing query requests.

Um recompilar refere-se a remover e recriar as estruturas de dados físicos associadas a um índice, incluindo todos os índices invertidos com base no campo.A rebuild refers to dropping and recreating the physical data structures associated with an index, including all field-based inverted indexes. No Azure Pesquisa Cognitiva, não é possível descartar e recriar campos individuais.In Azure Cognitive Search, you cannot drop and recreate individual fields. Para recompilar um índice, todo o armazenamento de campo deve ser excluído, recriado com base em um esquema de índice existente ou revisado e, em seguida, novamente preenchido com os dados enviados por push para o índice ou extraídos de fontes externas.To rebuild an index, all field storage must be deleted, recreated based on an existing or revised index schema, and then repopulated with data pushed to the index or pulled from external sources.

É comum recriar índices durante o desenvolvimento quando você está Iterando em um design de índice, mas também pode precisar recriar um índice de nível de produção para acomodar alterações estruturais, como adicionar tipos complexos ou adicionar campos a sugestores.It's common to rebuild indexes during development when you are iterating over index design, but you might also need to rebuild a production-level index to accommodate structural changes, such as adding complex types or adding fields to suggesters.

"Recompilar" versus "atualizar""Rebuild" versus "refresh"

A recompilação não deve ser confundida com a atualização do conteúdo de um índice com documentos novos, modificados ou excluídos.Rebuild should not be confused with refreshing the contents of an index with new, modified, or deleted documents. A atualização de um corpus de pesquisa é quase uma determinada em cada aplicativo de pesquisa, com alguns cenários que exigem atualizações de minutos (por exemplo, quando um corpus de pesquisa precisa refletir alterações de inventário em um aplicativo de vendas online).Refreshing a search corpus is almost a given in every search app, with some scenarios requiring up-to-the-minute updates (for example, when a search corpus needs to reflect inventory changes in an online sales app).

Contanto que você não esteja alterando a estrutura do índice, você pode atualizar um índice usando as mesmas técnicas que usou para carregar o índice inicialmente:As long as you are not changing the structure of the index, you can refresh an index using the same techniques that you used to load the index initially:

  • Para indexação de modo Push, chame Adicionar, atualizar ou excluir documentos para enviar por push as alterações a um índice.For push-mode indexing, call Add, Update or Delete Documents to push the changes to an index.

  • Para indexadores, você pode agendar a execução do indexador e usar o controle de alterações ou os carimbos de data/hora para identificar o Delta.For indexers, you can schedule indexer execution and use change-tracking or timestamps to identify the delta. Se as atualizações devem ser refletidas mais rápido do que o que um Agendador pode gerenciar, você pode usar a indexação do modo Push.If updates must be reflected faster than what a scheduler can manage, you can use push-mode indexing instead.

Recompilar condiçõesRebuild conditions

Remova e recrie um índice se qualquer uma das condições a seguir for verdadeira.Drop and recreate an index if any of the following conditions are true.

CondiçãoCondition DescriçãoDescription
Alterar uma definição de campoChange a field definition A revisão de um nome de campo, de um tipo de dados ou de atributos de índice específicos (pesquisáveis, filtráveis, classificáveis, com faceta) exige uma recompilação completa.Revising a field name, data type, or specific index attributes (searchable, filterable, sortable, facetable) requires a full rebuild.
Atribuir um analisador a um campoAssign an analyzer to a field Os analisadores são definidos em um índice e, em seguida, são atribuídos aos campos.Analyzers are defined in an index and then assigned to fields. É possível adicionar uma nova definição de analisador a um índice a qualquer momento, mas só é possível atribuir um analisador quando o campo é criado.You can add a new analyzer definition to an index at any time, but you can only assign an analyzer when the field is created. Isso é verdadeiro para as propriedades analyzer e indexAnalyzer.This is true for both the analyzer and indexAnalyzer properties. A propriedade searchAnalyzer é uma exceção (é possível atribuir essa propriedade a um campo existente).The searchAnalyzer property is an exception (you can assign this property to an existing field).
Atualizar ou excluir uma definição de analisador em um índiceUpdate or delete an analyzer definition in an index Não é possível excluir nem alterar uma configuração de analisador existente (analisador, gerador de token, filtro de token ou filtro de caracteres) no índice, a menos que você recompile todo o índice.You cannot delete or change an existing analyzer configuration (analyzer, tokenizer, token filter, or char filter) in the index unless you rebuild the entire index.
Adicionar um campo a um sugestorAdd a field to a suggester Se um campo já existir e você desejar adicioná-lo a um constructo Sugestores, será necessário recompilar o índice.If a field already exists and you want to add it to a Suggesters construct, you must rebuild the index.
Excluir um campoDelete a field Para remover fisicamente todos os rastreamentos de um campo, você precisa recriar o índice.To physically remove all traces of a field, you have to rebuild the index. Quando uma recompilação imediata não é prática, você pode modificar o código do aplicativo para desabilitar o acesso ao campo "excluído" ou usar o parâmetro de consulta $SELECT para escolher quais campos são representados no conjunto de resultados.When an immediate rebuild is not practical, you can modify application code to disable access to the "deleted" field or use the $select query parameter to choose which fields are represented in the result set. Fisicamente, a definição e o conteúdo do campo permanecem no índice até a próxima recompilação, quando você aplica um esquema que omite o campo em questão.Physically, the field definition and contents remain in the index until the next rebuild, when you apply a schema that omits the field in question.
Alternar camadasSwitch tiers Se você precisar de mais capacidade, não haverá nenhuma atualização in-loco no portal do Azure.If you require more capacity, there is no in-place upgrade in the Azure portal. Um novo serviço deve ser criado e os índices devem ser criados a partir do zero no novo serviço.A new service must be created, and indexes must be built from scratch on the new service. Para ajudar a automatizar esse processo, você pode usar o código de exemplo index-backup-restore neste repositório de exemplo do Azure pesquisa cognitiva .net.To help automate this process, you can use the index-backup-restore sample code in this Azure Cognitive Search .NET sample repo. Esse aplicativo fará o backup do índice em uma série de arquivos JSON e, em seguida, recriará o índice em um serviço de pesquisa que você especificar.This app will back up your index to a series of JSON files, and then recreate the index in a search service you specify.

Condições de atualizaçãoUpdate conditions

Muitas outras modificações podem ser feitas sem afetar as estruturas físicas existentes.Many other modifications can be made without impacting existing physical structures. Especificamente, as alterações a seguir não exigem uma recompilação de índice.Specifically, the following changes do not require an index rebuild. Para essas alterações, você pode atualizar uma definição de índice com suas alterações.For these changes, you can update an index definition with your changes.

  • Adicionar um novo campoAdd a new field
  • Definir o atributo recuperável em um campo existenteSet the retrievable attribute on an existing field
  • Definir searchAnalyzer em um campo existenteSet a searchAnalyzer on an existing field
  • Adicionar uma nova definição de analisador em um índiceAdd a new analyzer definition in an index
  • Adicionar, atualizar ou excluir perfis de pontuaçãoAdd, update, or delete scoring profiles
  • Adicionar, atualizar ou excluir configurações de CORSAdd, update, or delete CORS settings
  • Adicionar, atualizar ou excluir synonymMapsAdd, update, or delete synonymMaps

Quando você adiciona um novo campo, os documentos indexados existentes recebem um valor nulo para o novo campo.When you add a new field, existing indexed documents are given a null value for the new field. Em uma atualização futura de dados, os valores de dados de origem externos substituem os nulos adicionados pelo Azure Pesquisa Cognitiva.On a future data refresh, values from external source data replace the nulls added by Azure Cognitive Search. Para obter mais informações sobre como atualizar o conteúdo do índice, consulte Adicionar, atualizar ou excluir documentos.For more information on updating index content, see Add, Update or Delete Documents.

Como recompilar um índiceHow to rebuild an index

Durante o desenvolvimento, o esquema de índice é alterado com frequência.During development, the index schema changes frequently. Você pode planejar isso criando índices que podem ser excluídos, recriados e recarregados rapidamente com um pequeno conjunto de dados representativos.You can plan for it by creating indexes that can be deleted, recreated, and reloaded quickly with a small representative data set.

Para aplicativos já em produção, é recomendável criar um novo índice que é executado lado a lado de um índice existente para evitar a inatividade de consulta.For applications already in production, we recommend creating a new index that runs side by side an existing index to avoid query downtime. O código do aplicativo fornece redirecionamento para o novo índice.Your application code provides redirection to the new index.

A indexação não é executada em segundo plano e o serviço balanceia a indexação adicional em relação a consultas contínuas.Indexing does not run in the background and the service will balance the additional indexing against ongoing queries. Durante a indexação, você pode monitorar solicitações de consulta no portal para garantir que as consultas sejam concluídas oportunamente.During indexing, you can monitor query requests in the portal to ensure queries are completing in a timely manner.

  1. Determine se uma recompilação é necessária.Determine whether a rebuild is required. Se você estiver apenas adicionando campos ou alterando alguma parte do índice que não esteja relacionado a campos, talvez seja possível simplesmente atualizar a definição sem excluir, recriar e recarregá-la completamente.If you are just adding fields, or changing some part of the index that is unrelated to fields, you might be able to simply update the definition without deleting, recreating, and fully reloading it.

  2. Obtenha uma definição de índice caso você precise dela para referência futura.Get an index definition in case you need it for future reference.

  3. Descarte o índice existente, supondo que você não esteja executando índices novos e antigos lado a lado.Drop the existing index, assuming you are not running new and old indexes side by side.

    Todas as consultas que direcionam esse índice são descartadas imediatamente.Any queries targeting that index are immediately dropped. Lembre-se de que a exclusão de um índice é irreversível, destruindo o armazenamento físico para a coleção Fields e outras construções.Remember that deleting an index is irreversible, destroying physical storage for the fields collection and other constructs. Pause para pensar nas implicações antes de descartá-la.Pause to think about the implications before dropping it.

  4. Crie um índice revisado, em que o corpo da solicitação inclui definições de campo alteradas ou modificadas.Create a revised index, where the body of the request includes changed or modified field definitions.

  5. Carregue o índice com documentos de uma fonte externa.Load the index with documents from an external source.

Quando você cria o índice, o armazenamento físico é alocado para cada campo no esquema de índice, com um índice invertido criado para cada campo pesquisável.When you create the index, physical storage is allocated for each field in the index schema, with an inverted index created for each searchable field. Os campos não pesquisáveis podem ser usados em filtros ou expressões, mas não têm índices invertidos e não são pesquisáveis de texto completo ou de difuso.Fields that are not searchable can be used in filters or expressions, but do not have inverted indexes and are not full-text or fuzzy searchable. Em uma recompilação de índice, esses índices invertidos são excluídos e recriados com base no esquema de índice que você fornecer.On an index rebuild, these inverted indexes are deleted and recreated based on the index schema you provide.

Quando você carrega o índice, o índice invertido de cada campo é preenchido com todas as palavras exclusivas, indexadas de cada documento, com um mapa das IDs do documento correspondentes.When you load the index, each field's inverted index is populated with all of the unique, tokenized words from each document, with a map to corresponding document IDs. Por exemplo, durante a indexação de um conjunto de dados de hotéis, um índice invertido criado para um campo de cidade pode conter os termos para Seattle, Portland e assim por diante.For example, when indexing a hotels data set, an inverted index created for a City field might contain terms for Seattle, Portland, and so forth. Documentos que incluem Seattle ou Portland no campo Cidade teriam sua ID de documento listada juntamente com o termo.Documents that include Seattle or Portland in the City field would have their document ID listed alongside the term. Em qualquer operação Adicionar, atualizar ou excluir, os termos e a lista de IDs de documento são atualizadas de acordo.On any Add, Update or Delete operation, the terms and document ID list are updated accordingly.

Observação

Se você tiver rigorosos requisitos de SLA, você pode considerar o provisionamento de um novo serviço especificamente para esse trabalho, com o desenvolvimento e indexação ocorrendo em isolamento completo de um índice de produção.If you have stringent SLA requirements, you might consider provisioning a new service specifically for this work, with development and indexing occurring in full isolation from a production index. Um serviço separado é executado em seu próprio hardware, eliminando qualquer possibilidade de contenção de recursos.A separate service runs on its own hardware, eliminating any possibility of resource contention. Quando o desenvolvimento for concluído, você deixaria o novo índice em vigor, redirecionando as consultas para o novo ponto de extremidade e índice, ou executaria o código concluído para publicar um índice revisado em seu serviço de Pesquisa Cognitiva do Azure original.When development is complete, you would either leave the new index in place, redirecting queries to the new endpoint and index, or you would run finished code to publish a revised index on your original Azure Cognitive Search service. Atualmente, não há nenhum mecanismo para mover um índice pronto para uso para outro serviço.There is currently no mechanism for moving a ready-to-use index to another service.

Verificar atualizaçõesCheck for updates

Você pode começar a consultar um índice, assim que o primeiro documento for carregado.You can begin querying an index as soon as the first document is loaded. Se você souber a ID de um documento, a API REST de Procurar documento retorna o documento específico.If you know a document's ID, the Lookup Document REST API returns the specific document. Para testes mais amplos, você deve aguardar até que o índice seja totalmente carregado e, em seguida, usar consultas para verificar o contexto em que você espera ver.For broader testing, you should wait until the index is fully loaded, and then use queries to verify the context you expect to see.

Você pode usar o Search Explorer ou uma ferramenta de teste na Web, como o postmaster ou Visual Studio Code para verificar o conteúdo atualizado.You can use Search Explorer or a Web testing tool like Postman or Visual Studio Code to check for updated content.

Se você adicionou ou renomeou um campo, use $Select para retornar esse campo: search=*&$select=document-id,my-new-field,some-old-field&$count=trueIf you added or renamed a field, use $select to return that field: search=*&$select=document-id,my-new-field,some-old-field&$count=true

Veja tambémSee also