Soltar e reconstruir um índice na Pesquisa de IA do Azure

Este artigo explica como descartar e reconstruir um índice do Azure AI Search. Ele explica as circunstâncias em que as reconstruções são necessárias e fornece recomendações para mitigar os efeitos das reconstruções em solicitações de consulta em andamento. Se você tiver que reconstruir com frequência, recomendamos o uso de aliases de índice para facilitar a troca de qual índice seu aplicativo está apontando.

Durante o desenvolvimento ativo, é comum descartar e reconstruir índices quando você está iterando sobre o design do índice. A maioria dos desenvolvedores trabalha com uma pequena amostra representativa de seus dados para que a reindexação seja mais rápida.

Modificações que exigem uma reconstrução

A tabela a seguir lista as modificações que exigem uma queda de índice e reconstrução.

Ação Descrição
Eliminar um campo Para remover fisicamente todos os vestígios de um campo, é necessário reconstruir o índice. Quando uma reconstrução imediata não é prática, você pode modificar o código do aplicativo para redirecionar o acesso para longe de um campo obsoleto ou usar searchFields e selecionar parâmetros de consulta para escolher quais campos serão pesquisados e retornados. Fisicamente, a definição e o conteúdo do campo permanecem no índice até a próxima reconstrução, quando você aplica um esquema que omite o campo em questão.
Alterar uma definição de campo As revisões de um nome de campo, tipo de dados ou atributos de índice específicos (pesquisável, filtrável, classificável, facetable) exigem uma reconstrução completa.
Atribuir um analisador a um campo Os analisadores são definidos em um índice, atribuídos a campos e, em seguida, invocados durante a indexação para informar como os tokens são criados. Você pode adicionar uma nova definição de analisador a um índice a qualquer momento, mas só pode atribuir um analisador quando o campo for criado. Isso é verdadeiro para as propriedades do analisador e do indexAnalyzer. A propriedade searchAnalyzer é uma exceção (você pode atribuir essa propriedade a um campo existente).
Atualizar ou excluir uma definição de analisador em um índice Não é possível excluir ou alterar uma configuração existente do analisador (analisador, tokenizador, filtro de token ou filtro char) no índice, a menos que você reconstrua todo o índice.
Adicionar um campo a um sugeridor Se um campo já existir e você quiser adicioná-lo a uma construção Sugestões , reconstrua o índice.
Alternar níveis Não há suporte para atualizações in-loco. Se você precisar de mais capacidade, crie um novo serviço e reconstrua seus índices do zero. Para ajudar a automatizar esse processo, você pode usar o código de exemplo index-backup-restore neste repositório de exemplo .NET do Azure AI Search. Este aplicativo fará backup do seu índice para uma série de arquivos JSON e, em seguida, recriará o índice em um serviço de pesquisa que você especificar.

Modificações sem necessidade de reconstrução

Muitas outras modificações podem ser feitas sem afetar as estruturas físicas existentes. Especificamente, as alterações a seguir não exigem uma reconstrução de índice. Para essas alterações, você pode atualizar uma definição de índice existente com suas alterações.

  • Adicionar um campo novo
  • Definir o atributo recuperável em um campo existente
  • Atualizar searchAnalyzer em um campo com um indexAnalyzer existente
  • Adicionar uma nova definição de analisador em um índice (que pode ser aplicado a novos campos)
  • Adicionar, atualizar ou excluir perfis de pontuação
  • Adicionar, atualizar ou excluir configurações de CORS
  • Adicionar, atualizar ou excluir synonymMaps
  • Adicionar, atualizar ou excluir configurações semânticas

Quando você adiciona um novo campo, os documentos indexados existentes recebem um valor nulo para o novo campo. Em uma atualização de dados futura, os valores dos dados de origem externa substituem os nulos adicionados pelo Azure AI Search. Para obter mais informações sobre como atualizar o conteúdo do índice, consulte Adicionar, atualizar ou excluir documentos.

Como reconstruir um índice

Durante o desenvolvimento, o esquema de índice muda com freqüência. Você pode planejá-lo criando índices que podem ser excluídos, recriados e recarregados rapidamente com um pequeno conjunto de dados representativo.

Para aplicativos já em produção, recomendamos a criação de um novo índice que execute lado a lado um índice existente para evitar o tempo de inatividade da consulta. O código do aplicativo fornece redirecionamento para o novo índice.

  1. Verifique se há espaço. Os serviços de pesquisa estão sujeitos a um número máximo de índices, variando de acordo com a camada de serviço. Certifique-se de que tem espaço para um segundo índice.

  2. Determine se uma reconstrução é necessária. Se você estiver apenas adicionando campos ou alterando alguma parte do índice que não esteja relacionada a campos, talvez seja possível simplesmente atualizar a definição sem excluí-la, recriá-la e recarregá-la totalmente.

  3. Obtenha uma definição de índice caso precise dela para referência futura.

  4. Solte o índice existente, supondo que você não esteja executando índices novos e antigos lado a lado.

    Todas as consultas direcionadas a esse índice são imediatamente descartadas. Lembre-se de que excluir um índice é irreversível, destruindo o armazenamento físico para a coleção de campos e outras construções. Faça uma pausa para pensar sobre as implicações antes de abandoná-lo.

  5. Crie um índice revisado, onde o corpo da solicitação inclua definições de campo alteradas ou modificadas.

  6. Carregue o índice com documentos de uma fonte externa.

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. Os campos que não são pesquisáveis podem ser usados em filtros ou expressões, mas não têm índices invertidos e não são de texto completo ou pesquisáveis difusos. Em uma reconstrução de índice, esses índices invertidos são excluídos e recriados com base no esquema de índice fornecido.

Quando você carrega o índice, o índice invertido de cada campo é preenchido com todas as palavras exclusivas e tokenizadas de cada documento, com um mapa para as IDs de documento correspondentes. Por exemplo, ao indexar um conjunto de dados de hotéis, um índice invertido criado para um campo Cidade pode conter termos para Seattle, Portland e assim por diante. Os documentos que incluem Seattle ou Portland no campo Cidade teriam seu documento de identificação listado ao lado do termo. Em qualquer operação Adicionar, Atualizar ou Excluir , os termos e a lista de ID do documento são atualizados de acordo.

Equilibrando cargas de trabalho

A indexação não é executada em segundo plano, mas o serviço de pesquisa equilibrará quaisquer trabalhos de indexação em relação a consultas contínuas. Durante a indexação, você pode monitorar as solicitações de consulta no portal para garantir que as consultas sejam concluídas em tempo hábil.

Se as cargas de trabalho de indexação introduzirem níveis inaceitáveis de latência de consulta, realize análises de desempenho e analise essas dicas de desempenho para obter uma possível atenuação.

Verificar se há atualizações

Você pode começar a consultar um índice assim que o primeiro documento for carregado. Se você souber a ID de um documento, a API REST do documento de pesquisa retornará o documento específico. Para testes mais amplos, você deve esperar até que o índice seja totalmente carregado e, em seguida, usar consultas para verificar o contexto que você espera ver.

Você pode usar o Search Explorer ou um cliente REST para verificar se há conteúdo atualizado.

Se você adicionou ou renomeou um campo, use $select para retornar esse campo: search=*&$select=document-id,my-new-field,some-old-field&$count=true

Consulte também