Compartilhar via


Criar um índice na IA do Azure Search

Neste artigo, saiba quais são as etapas para definir um esquema para um índice de pesquisa e enviá-lo para um serviço Pesquisa. Criar um índice estabelece as estruturas de dados físicos no seu serviço de pesquisa. Depois que o índice for criado, carregue o índice como uma tarefa separada.

Pré-requisitos

  • Permissões de gravação como um Colaborador do Serviço Pesquisa ou uma chave de API de administrador para autenticação baseada em chave.

  • Uma compreensão dos dados extras do dispositivo que você quer importar. Um índice de pesquisa é baseado no conteúdo externo que você quer tornar pesquisável. O conteúdo pesquisável é armazenado como campos em um índice. Você deve ter uma ideia clara de quais campos de origem quer tornar pesquisáveis, recuperáveis, filtráveis, facultáveis e classificáveis (confira a lista de verificação do esquema para obter diretrizes).

  • Um campo exclusivo nos dados de origem que possa ser usado como a chave (ou ID) do documento no índice.

  • Um local de índice estável. Não há suporte para mover um índice existente para um serviço de pesquisa diferente. Revisite os requisitos do aplicativo e verifique se o serviço de pesquisa existente (capacidade e localização) é suficiente para suas necessidades.

  • Por fim, todas as camadas de serviço têm limites de índice no número de objetos que você pode criar. Por exemplo, se você estiver experimentando na camada Gratuita, só poderá ter três índices em um determinado momento. No próprio índice, há limites para vetores e limites de índice no número de campos simples e complexos.

Chaves de documentos

Um índice de pesquisa tem dois requisitos: ele deve ter um nome e uma chave de documento.

Uma chave de documento é o identificador exclusivo de um documento de pesquisa, e um documento de pesquisa é uma coleção de campos que descreve completamente algo. Por exemplo, se você estiver indexando um conjunto de dados de filmes, um documento de pesquisa conterá o título, o gênero e a duração de um único filme.

Na Pesquisa de IA do Azure, uma chave de documento deve ser uma cadeia de caracteres e deve se originar de valores exclusivos na fonte de dados que está fornecendo o conteúdo a ser indexado. Um serviço de pesquisa não gera valores de chave, mas, em alguns cenários, (como o Indexador de Tabelas do Azure), sintetiza os valores existentes para criar uma chave exclusiva para os documentos que estão sendo indexados.

Durante a indexação incremental, em que o conteúdo novo e atualizado é indexado, os documentos de entrada com novas chaves são adicionados, enquanto os documentos de entrada com chaves existentes são mesclados ou substituídos, dependendo se os campos de índice são nulos ou preenchidos.

Lista de verificação de esquema

Use esta lista de verificação para auxiliar as decisões de design do índice de pesquisa.

  1. Examine as convenções de nomenclatura para que os nomes de índice e de campo esteja em conformidade com as regras de nomenclatura.

  2. Examine tipos de dados com suporte. O tipo de dados afetará como o campo é usado. Por exemplo, o conteúdo numérico pode ser filtrado, mas não pesquisável por texto completo. O tipo de dados mais comum é Edm.String para texto pesquisável, que é tokenizado e consultado usando o mecanismo de pesquisa de texto completo. O tipo de dados mais comum para um campo vetorial é Edm.Single, mas você também pode usar outros tipos.

  3. Identifique uma chave de documento. Uma chave de documento é um requisito de índice. É um único campo de cadeia de caracteres e será preenchido com base em um campo de dados de origem que contém valores exclusivos. Por exemplo, se você estiver indexando do Armazenamento de Blobs, o caminho de armazenamento de metadados geralmente será usado como a chave do documento porque identifica exclusivamente cada blob no contêiner.

  4. Identifique os campos na sua fonte de dados que podem contribuir com conteúdo pesquisável no índice.

    O conteúdo não vetorial pesquisável inclui cadeias de caracteres curtas ou longas que são consultadas usando o mecanismo de pesquisa de texto completo. Se o conteúdo for detalhado (frases pequenas ou partes maiores), experimente analisadores diferentes para ver como o texto é tokenizado.

    O conteúdo vetorial pesquisável pode ser imagens ou texto (em qualquer idioma) que exista como uma representação matemática. Você pode usar tipos de dados estreitos ou compactação de vetores para diminuir o tamanho dos campos vetoriais.

    As Atribuições do atributo do campo determinarão os comportamentos de pesquisa e a representação física do seu índice no serviço de pesquisa. Determinar como os campos devem ser especificados é um processo iterativo para muitos clientes. Para acelerar as iterações, comece com os dados de exemplo para que você possa remover e recriar com facilidade.

  5. Identifique quais campos de origem podem ser usados como filtros. Conteúdo numérico e campos de texto curto, especialmente aqueles com valores repetidos, são boas opções. Ao trabalhar com filtros, lembre:

    • Os filtros podem ser usados em consultas vetoriais e não vetoriais, mas o filtro em si é aplicado a campos alfanuméricos (não vetoriais) em seu índice.

    • Opcionalmente, os campos filtráveis podem ser usados faceted navigation.

    • Os campos filtráveis são retornados em ordem arbitrária, portanto, considere tornar-os classificáveis também.

  6. Para campos vetoriais, especifique uma configuração de busca em vetores e os algoritmos usados para criar caminhos de navegação e preencher o espaço de inserção. Para obter mais informações, confira Adicionar campos vetoriais.

    Os campos vetoriais têm propriedades extras que os campos não vetoriais não têm, como os algoritmos a serem usados e a compactação de vetores.

    Os campos vetoriais omitem atributos que não são úteis em dados vetoriais, como classificação, filtragem e facetamento.

  7. Para campos não vetoriais, determine se deve usar o analisador padrão ("analyzer": null) ou um analisador diferente. Os analisadores são usados para tokenizar campos de texto durante a indexação e a execução da consulta.

    Nas cadeias de caracteres multilíngues, considere um analisador de linguagem.

    Nas cadeias de caracteres hifenizadas ou caracteres especiais, considere analisadores especializados. Um exemplo é palavra-chave que trata todo o conteúdo de um campo como um único token. Esse comportamento é útil para os dados como CEP, IDs e alguns nomes de produto. Para obter mais informações, consulte Pesquisa de termo parcial e padrões com caracteres especiais.

Observação

A pesquisa de texto completo é realizada em termos tokenizados durante a indexação. Se suas consultas não retornarem os resultados esperados, teste a tokenização para verificar se a cadeia de caracteres que você está pesquisando realmente existe. Você pode experimentar diferentes analisadores em cadeias de caracteres para ver como os tokens são produzidos para vários analisadores.

Crie um índice

Quando você estiver pronto para criar o índice, use um cliente de pesquisa que possa enviar a solicitação. Você pode usar o portal do Azure ou as APIs REST para desenvolvimento inicial e testes de prova de conceito; caso contrário, é comum usar SDKs do Azure.

Durante o desenvolvimento, planeje recompilações frequentes. Como as estruturas físicas são criadas no serviço, é necessário remover e recriar índices para muitas modificações. Considere trabalhar com um subconjunto de seus dados para acelerar as recompilações.

O design de índice por meio do portal impõe requisitos e regras de esquema para tipos de dados específicos, como a não permissão de recursos de pesquisa de texto inteiro em campos numéricos.

  1. Entre no portal do Azure.

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

  3. Na página Visão geral do serviço de pesquisa, escolha uma das opções para criar um índice de pesquisa:

    O assistente é um fluxo de trabalho de ponta a ponta que cria um indexador, uma fonte de dados e um índice concluído. Ele também carrega os dados. Se você não precisa de tantas funções, use Adicionar Índice.

A captura de tela a seguir destaca onde Adicionar Índice e Importar Dados aparecem na barra de comandos. Depois que um índice é criado, você pode encontrá-lo novamente na guia Índices.

Comando Adicionar índice

Dica

Depois de criar um índice no portal, você pode copiar a representação JSON e adicioná-la ao código do aplicativo.

Definir corsOptions para consultas entre origens

Esquemas de índice incluem uma seção para definir corsOptions. Por padrão, o JavaScript do lado do cliente não pode chamar as APIs porque os navegadores impedem todas as solicitações entre origens. Para permitir consultas entre origens pelo índice, habilite o Compartilhamento de Recursos entre Origens (CORS) definindo o atributo corsOptions. Por motivos de segurança, apenas as APIs de consulta dão suporte ao CORS.

"corsOptions": {
  "allowedOrigins": [
    "*"
  ],
  "maxAgeInSeconds": 300

As seguintes propriedades podem ser definidas para o CORS:

  • allowedOrigins (obrigatório): essa é uma lista de origens às quais será concedido acesso ao seu índice. O código JavaScript fornecido dessas origens tem permissão para consultar seu índice (supondo que o chamador forneça uma chave válida ou tenha permissões). Cada origem é tipicamente da forma, protocol://<fully-qualified-domain-name>:<port> embora <port> seja frequentemente omitida. Para obter mais informações, consulte compartilhamento de recursos entre origens (Wikipédia).

    Se você quiser permitir acesso a todas as origens, inclua * como um único item na matriz allowedOrigins. Essa não é uma prática recomendada para os serviços de pesquisa de produção, mas geralmente é útil para desenvolvimento e depuração.

  • maxAgeInSeconds (opcional): navegadores usam esse valor para determinar a duração (em segundos) para respostas de simulação de CORS de cache. Esse deve ser um inteiro não negativo. Um período de cache mais longo oferece melhor desempenho, mas estende a quantidade de tempo que uma política CORS precisa para entrar em vigor. Se esse valor não for definido, será usada uma duração padrão de cinco minutos.

Atualizações permitidas em índices existentes

Criar Índice cria as estruturas de dados física (arquivos e índices invertidos) no serviço de pesquisa. Depois que o índice é criado, sua capacidade de efetuar alterações usando Criar ou Atualizar Índice depende do fato de suas modificações invalidarem essas estruturas físicas. A maioria dos atributos de campo não pode ser alterada depois que o campo é criado no índice.

Como alternativa, você pode criar um alias de índice que serve como uma referência estável no código do aplicativo. Em vez de atualizar o seu código, você pode atualizar um alias de índice para apontar para versões de índice mais recentes.

Para minimizar a rotatividade no processo de design, a tabela a seguir descreve quais elementos são fixos e flexíveis no esquema. Alterar um elemento fixo requer uma recompilação do índice, enquanto elementos flexíveis podem ser alterados a qualquer momento sem afetar a implementação física.

Element É possível atualizar?
Nome Não
Chave Não
Nomes e tipos de campo Não
Atributos de campo (pesquisáveis, filtráveis, facetáveis, classificáveis) Não
Atributo de campo (recuperável) Sim
Armazenado (aplica-se a vetores) Não
Analisador Você pode adicionar e modificar analisadores personalizados no índice. Em relação às atribuições do analisador nos campos da cadeia de caracteres, você só pode modificar searchAnalyzer. Todas as outras atribuições e modificações exigem uma recompilação.
Perfis de pontuação Sim
Sugestores Não
CORS (compartilhamento de recursos entre origens) Yes
Criptografia Sim

Próximas etapas

Use os links a seguir para se familiarizar com o carregamento de um índice que contém dados ou a ampliação de um índice com um mapa de sinônimos.