Índices em Pesquisa Cognitiva Azure

Na Pesquisa Cognitiva Azure, um índice de pesquisa é o seu conteúdo pestado, disponível para o motor de pesquisa para indexação, pesquisa completa de texto e consultas filtradas. Um índice é definido por um esquema e guardado para o serviço de pesquisa, com a importação de dados a seguir como segundo passo. Este conteúdo existe dentro do seu serviço de pesquisa, além das suas principais lojas de dados, o que é necessário para os tempos de resposta milissegundos esperados nas aplicações modernas. Com exceção de cenários específicos de indexação, o serviço de pesquisa nunca se ligará ou consultará os seus dados locais.

Se estiver a criar e gerir um índice de pesquisa, este artigo irá ajudá-lo a compreender o seguinte:

  • Conteúdo (documentos e esquema)
  • Representação física
  • Operações básicas

Prefere ser prático imediatamente? Ver Criar um índice de pesquisa em vez disso.

Conteúdo de um índice de pesquisa

Na Pesquisa Cognitiva, os índices contêm documentos de pesquisa. Conceptualmente, um documento é uma única unidade de dados pesmáveis no seu índice. Por exemplo, um retalhista pode ter um documento para cada produto, uma organização noticiosa pode ter um documento para cada artigo, um site de viagens pode ter um documento para cada hotel e destino, e assim por diante. Mapear estes conceitos para equivalentes de base de dados mais familiares: um índice de pesquisa equivale a uma tabela, e os documentos são aproximadamente equivalentes a linhas numa tabela.

A estrutura de um documento é determinada pelo esquema de índice, conforme ilustrado abaixo. A recolha de "campos" é tipicamente a maior parte de um índice, onde cada campo é nomeado, atribuído um tipo de dado, e atribuído com comportamentos admissíveis que determinam como é usado.

{
  "name": "name_of_index, unique across the service",
  "fields": [
    {
      "name": "name_of_field",
      "type": "Edm.String | Collection(Edm.String) | Edm.Int32 | Edm.Int64 | Edm.Double | Edm.Boolean | Edm.DateTimeOffset | Edm.GeographyPoint",
      "searchable": true (default where applicable) | false (only Edm.String and Collection(Edm.String) fields can be searchable),
      "filterable": true (default) | false,
      "sortable": true (default where applicable) | false (Collection(Edm.String) fields cannot be sortable),
      "facetable": true (default where applicable) | false (Edm.GeographyPoint fields cannot be facetable),
      "key": true | false (default, only Edm.String fields can be keys),
      "retrievable": true (default) | false,
      "analyzer": "name_of_analyzer_for_search_and_indexing", (only if 'searchAnalyzer' and 'indexAnalyzer' are not set)
      "searchAnalyzer": "name_of_search_analyzer", (only if 'indexAnalyzer' is set and 'analyzer' is not set)
      "indexAnalyzer": "name_of_indexing_analyzer", (only if 'searchAnalyzer' is set and 'analyzer' is not set)
      "synonymMaps": [ "name_of_synonym_map" ] (optional, only one synonym map per field is currently supported)
    }
  ],
  "suggesters": [ ],
  "scoringProfiles": [ ],
  "analyzers":(optional)[ ... ],
  "charFilters":(optional)[ ... ],
  "tokenizers":(optional)[ ... ],
  "tokenFilters":(optional)[ ... ],
  "defaultScoringProfile": (optional) "...",
  "corsOptions": (optional) { },
  "encryptionKey":(optional){ }
  }
}

Outros elementos são colapsados por brevidade, mas os seguintes links podem fornecer o detalhe:

Definições de campo

Um documento de pesquisa é definido pela coleção "campos" no corpo do pedido Do Índice criar. Você precisará de campos para identificação de documentos (chaves), armazenamento de texto pesquisável, e campos para suporte filtros, facetas e tipos. Também pode precisar de campos para dados que um utilizador nunca vê. Por exemplo, pode querer campos para margens de lucro ou promoções de marketing que pode usar para modificar o rank de pesquisa.

Se os dados recebidos forem hierárquicos de natureza, pode representá-lo dentro de um índice como um tipo complexo, usado para representar estruturas aninhadas. O conjunto de dados de amostras incorporado, Hotéis, ilustra tipos complexos usando um Endereço (contém vários sub-campos) que tem uma relação um-para-um com cada hotel, e uma coleção complexa de quartos, onde vários quartos estão associados a cada hotel.

Atributos do campo

Os atributos de campo determinam como um campo é utilizado, por exemplo, se é utilizado na pesquisa em texto completo, navegação por facetas, operações de ordenação e assim sucessivamente.

Os campos de cordas são frequentemente marcados como "pesmáveis" e "recuperáveis". Os campos utilizados para reduzir os resultados da pesquisa incluem "sortível", "filtrado" e "facetable".

Atributo Descrição
"Pesmável" Texto completo pesquisável, sujeito a análise lexical, como separação de palavras durante a indexação. Se definir um campo pesquisável para um valor como "sunny day", será dividido internamente nos tokens individuais "sunny" e "day". Para obter detalhes, veja Como funciona a pesquisa em texto completo.
"filtrado" Referenciado na consulta $filter. Os campos filtráveis do tipo Edm.String ou Collection(Edm.String) não são submetidos a separação de palavras, pelo que as comparações destinam-se apenas a correspondências exatas. Por exemplo, se definir um campo f para "sunny day", $filter=f eq 'sunny' não encontrará correspondências, mas $filter=f eq 'sunny day' sim.
"tributável" Por predefinição, o sistema ordena os resultados por classificação, mas pode configurar a ordenação com base nos campos nos documentos. Campos do tipo Collection(Edm.String) não podem ser "ordenados".
"facetable" Normalmente, é utilizado numa apresentação de resultados de pesquisa que inclui uma contagem de resultados por categoria (por exemplo, hotéis numa cidade específica). Esta opção não pode ser utilizada com campos do tipo Edm.GeographyPoint. Os campos do tipo Edm.String que são filtrados, "ordenados", ou "facetable" podem ter no máximo 32 quilobytes de comprimento. Para mais detalhes, veja Criar um Índice (API REST).
"chave" Identificador exclusivo de documentos no índice. Deve ser selecionado exatamente um campo como o campo de chave e tem de ser do tipo Edm.String.
"recuperável" Determina se o campo pode ser devolvido num resultado da pesquisa. Isto é útil quando quiser utilizar um campo (como margem de lucro) como mecanismo de filtro, ordenação ou classificação, mas não quer que o campo esteja visível para o utilizador final. Este atributo tem de ser true para campos key.

Embora possa adicionar novos campos em qualquer altura, as definições de campos existentes estão bloqueadas durante o ciclo de vida do índice. Por este motivo, os programadores utilizam normalmente o portal para criar índices simples, testar ideias ou utilizar as páginas do portal para procurar uma definição. A iteração frequente através de uma estrutura de índice é mais eficiente se seguir uma abordagem baseada em código de modo a poder reconstruir o índice facilmente.

Nota

As APIs que usa para construir um índice têm diferentes comportamentos predefinidos. Para as APIs REST, a maioria dos atributos são ativados por padrão (por exemplo, "pesmável" e "recuperável" são verdadeiros para campos de cordas) e muitas vezes só precisa de os definir se quiser desligá-los. Para o .NET SDK, o oposto é verdade. Em qualquer propriedade que não se desconte explicitamente, o padrão é desativar o comportamento de pesquisa correspondente, a menos que o ative especificamente.

Estrutura física e tamanho

Na Pesquisa Cognitiva Azure, a estrutura física de um índice é em grande parte uma implementação interna. Pode aceder ao seu esquema, consultar o seu conteúdo, monitorizar o seu tamanho e gerir a capacidade, mas os próprios clusters ( índices, fragmentos e outros ficheiros e pastas) são geridos internamente pela Microsoft.

Pode monitorizar o tamanho do índice no separador Índices no portal Azure ou emitindo um pedido DE INDEX contra o seu serviço de pesquisa. Também pode emitir um pedido de Estatísticas de Serviço e verificar o valor do tamanho do armazenamento.

O tamanho de um índice é determinado por:

  • Quantidade e composição dos seus documentos
  • Atributos em campos individuais
  • Configuração do índice (especificamente, se você inclui sugestivos)

A composição e quantidade do documento são determinadas pelo que escolhe importar. Lembre-se que um índice de pesquisa deve conter apenas conteúdo pesmável. Se os dados de origem incluirem campos binários, omita esses campos a menos que esteja a usar o enriquecimento de IA para quebrar e analisar o conteúdo para criar informações pes pesjáveis por texto.

Os atributos de campo determinam comportamentos. Para apoiar esses comportamentos, o processo de indexação cria as estruturas de dados necessárias. Por exemplo, "pescê-lo" invoca a pesquisa completa de texto, que digitaliza índices invertidos para o termo tokenized. Em contraste, um atributo "filtrado" ou "ordenado" suporta a iteração sobre cordas não modificadas. O exemplo na secção seguinte mostra variações no tamanho do índice com base nos atributos selecionados.

Os sugestivos são construções que suportam consultas de tipo de futuro ou autocompletas. Como tal, quando se inclui um sugestivo, o processo de indexação criará as estruturas de dados necessárias para a correspondência de caracteres verbatim. Os sugestivos são implementados ao nível do campo, por isso escolha apenas os campos que são razoáveis para o tipo de frente.

Exemplo demonstrando as implicações de armazenamento de atributos e sugestivos

A imagem que se segue ilustra padrões de armazenamento de índices resultantes de várias combinações de atributos. O índice baseia-se no índice de amostra de imóveis, que pode criar facilmente utilizando o assistente de dados de Importação e dados de amostras incorporados. Embora os esquemas de índice não sejam mostrados, pode inferir os atributos com base no nome do índice. Por exemplo, o índice de pesquisa de imóveis tem o atributo "pesmável" selecionado e nada mais, o índice realestate-recuperável tem o atributo "recuperável" selecionado e nada mais, e assim por diante.

Index size based on attribute selection

Embora estas variantes de índice sejam um pouco artificiais, podemos referir-nos a elas para comparações amplas de como os atributos afetam o armazenamento:

  • "Recuperável" não tem impacto no tamanho do índice.
  • "filtrado", "ordenado", "facetable" consome mais armazenamento.
  • o sugestivo tem um grande potencial para aumentar o tamanho do índice, mas não tanto quanto a imagem indica (todos os campos que poderiam ser informados sugerindo foram selecionados, o que não é um cenário provável na maioria dos índices).

Também não refletem o impacto dos analisadores. Se estiver a utilizar o tokenizer edgeNgram para armazenar sequências verbatim de caracteres (a, ab, abc, abcd), o tamanho do índice será maior do que se usasse um analisador padrão.

Operações básicas e interação

Agora que tem uma ideia melhor do que é um índice, esta secção introduz operações de tempo de execução de índices, incluindo a ligação e a garantia de um único índice.

Nota

Ao gerir um índice, esteja ciente de que não existe suporte de portal ou API para mover ou copiar um índice. Em vez disso, os clientes normalmente apontam a sua solução de implementação de aplicações num serviço de pesquisa diferente (se usarem o mesmo nome de índice), ou revêem o nome para criar uma cópia no serviço de pesquisa atual e, em seguida, constroem-na.

Isolamento de índices

Na Pesquisa Cognitiva, trabalhará com um índice de cada vez, onde todas as operações relacionadas com índices visam um único índice. Não existe nenhum conceito de índices relacionados ou a junção de índices independentes para indexação ou consulta.

Disponível continuamente

Um índice está continuamente disponível, sem capacidade de parar ou de o desligar. Porque é projetado para o funcionamento contínuo, quaisquer atualizações ao seu conteúdo, ou adições ao próprio índice, acontecem em tempo real. Como resultado, as consultas podem devolver temporariamente resultados incompletos se um pedido coincidir com uma atualização de documento.

Note que existe continuidade de consulta para operações documentais (refrescantes ou eliminando) e para modificações que não impactam a estrutura e integridade existentes do índice atual (como adicionar novos campos). Se precisar de fazer atualizações estruturais (alterando os campos existentes), estas são normalmente geridas utilizando um fluxo de trabalho de drop-and-rebuild num ambiente de desenvolvimento, ou criando uma nova versão do índice no serviço de produção.

Para evitar uma reconstrução de índices, alguns clientes que estão a fazer pequenas alterações optam por "ver versão" de um campo, criando um novo que coexiste ao lado de uma versão anterior. Com o tempo, isto leva a conteúdos órfãos sob a forma de campos obsoletos ou definições obsoletas de analisador personalizado, especialmente num índice de produção que é caro de replicar. Pode abordar estas questões em atualizações planeadas para o índice como parte da gestão do ciclo de vida do índice.

Ligação e segurança do ponto final

Todos os pedidos de indexação e consulta visam um índice. Os pontos finais são geralmente um dos seguintes:

Ponto final Controlo de ligação e acessos
<your-service>.search.windows.net/indexes Visa a recolha de índices. Usado ao criar, listar ou apagar um índice. São necessários direitos de administração para estas operações, disponíveis através de chaves API administradas ou de uma função de Contribuinte de Pesquisa.
<your-service>.search.windows.net/indexes/<your-index>/docs Visa a recolha de documentos de um único índice. Utilizado ao consultar um índice ou atualização de dados. Para consultas, os direitos de leitura são suficientes e estão disponíveis através de teclas API de consulta ou de um papel de leitor de dados. Para atualização de dados, são necessários direitos de administração.

Passos seguintes

Você pode obter experiência prática criando um índice usando quase qualquer amostra ou walkthrough para Pesquisa Cognitiva. Para começar, pode escolher qualquer um dos arranques rápidos da tabela de conteúdos.

Mas também vai querer familiarizar-se com metodologias para carregar um índice com dados. A definição de índices e as estratégias de importação de dados são definidas em conjunto. Os seguintes artigos fornecem mais informações sobre a criação e carregamento de um índice.