Melhorar um índice com analisadores e termos indexados

Concluído

A Pesquisa de IA do Azure é configurada por padrão para analisar texto e identificar tokens que serão úteis em seu índice. Os tokens certos garantem que os usuários possam encontrar os documentos de que precisam rapidamente. Na maioria dos casos, a configuração padrão produz um índice ideal. No entanto, quando você tem campos incomuns ou exclusivos, convém configurar exatamente como o texto é analisado.

Aqui, você aprenderá a definir um analisador personalizado para controlar como o conteúdo de um campo é dividido em tokens para inclusão no índice.

Quando a Pesquisa de IA indexa o seu conteúdo, ela recupera o texto. Para criar um índice útil, com termos que ajudam os usuários a localizar documentos, esse texto precisa ser processado. Por exemplo:

  • O texto deve ser dividido em palavras, muitas vezes usando caracteres de espaço em branco e pontuação como delimitadores.
  • Palavras irrelevantes, como "o" e "isso", devem ser removidas porque os usuários não pesquisam por elas.
  • As palavras devem ser reduzidas à forma raiz. Por exemplo, palavras no tempo passado, como "correu", devem ser substituídas por palavras no tempo presente, como "correr".

Na Pesquisa de IA, esse tipo de processamento é executado por analisadores. Se você não especificar um analisador para um campo, o analisador Lucene padrão será usado. O analisador lucene padrão é uma boa opção para a maioria dos campos, pois ele pode processar muitos idiomas e retornar tokens úteis para o índice.

Como alternativa, você pode especificar um dos analisadores integrados à Pesquisa de IA. Analisadores internos são de dois tipos:

  • Analisadores de linguagem. Se você precisar de recursos avançados para idiomas específicos, como lematização, descomposição de palavras e reconhecimento de entidade, use um analisador de idioma interno. A Microsoft fornece 50 analisadores para idiomas diferentes.
  • Analisadores especializados. Esses analisadores são independentes de linguagem e usados para campos especializados, como CEP ou IDs de produto. Você pode, por exemplo, usar o PatternAnalyzer e especificar uma expressão regular para corresponder aos separadores de token.

O que é um analisador personalizado?

Os analisadores internos fornecem muitas opções, mas às vezes você precisa de um analisador com um comportamento incomum para um campo. Nesses casos, você pode criar um analisador personalizado.

Um analisador personalizado consiste em:

  • Filtros de caractere. Esses filtros processam uma cadeia de caracteres antes de atingir o gerador de tokens.
  • Geradores de tokens. Esses componentes dividem o texto em tokens a serem adicionados ao índice.
  • Filtros de token. Esses filtros removem ou modificam os tokens emitidos pelo gerador de tokens.

Vamos examinar esses objetos em mais detalhes.

Filtros de caractere

Algumas operações podem precisar ser concluídas no texto antes de serem divididas em tokens. Os filtros de caractere habilitam essas operações. Há três filtros de caracteres que você pode usar:

  • html_strip. Esse filtro remove constructos HTML, como marcas e atributos.
  • mapeamento. Esse filtro permite que você especifique mapeamentos que substituem uma cadeia de caracteres por outra. Por exemplo, você pode especificar um mapeamento que substitui TX por Texas.
  • pattern_replace. Esse filtro permite que você especifique uma expressão regular que identifica padrões no texto de entrada e como o texto correspondente deve ser substituído.

Criadores de token

O gerador de tokens é o componente que divide o texto transformando-o nos tokens que serão armazenados no índice. Os tokens também dividem palavras nos respectivos formatos raiz. Geralmente, um token é apenas uma palavra, mas talvez você queira criar tokens incomuns, como:

  • Um endereço postal completo.
  • Uma URL ou endereço de email completo.
  • Palavras baseadas na gramática de um idioma específico.

Há 13 geradores de tokens diferentes dentre os quais escolher. Esses geradores de tokens incluem:

  • clássico. Esse gerador de tokens processa texto com base na gramática para idiomas europeus.
  • palavra-chave. Esse gerador de tokens emite toda a entrada como apenas um token. Use esse gerador de tokens para campos que sempre devem ser indexados como um valor.
  • minúsculo. Esse gerador de tokens divide o texto em caracteres que não são letras e modifica os tokens resultantes, colocando-os totalmente em letras minúsculas.
  • microsoft_language_tokenizer. Esse gerador de tokens divide o texto com base na gramática do idioma especificado.
  • padrão. Esse gerador de tokens divide textos no local que corresponde a uma expressão regular especificada.
  • espaço em branco. Esse gerador de tokens divide o texto onde houver espaço em branco.

Observação

Para obter uma lista completa de tokenizadores, confira Adicionar analisadores personalizados aos campos de cadeia de caracteres em um índice da Pesquisa de IA do Azure na seção Saiba mais abaixo.

Filtros de token

Depois que o gerador de tokens tiver dividido o texto de entrada em tokens, talvez você queira adicionar algum processamento extra, como remover palavras irrelevantes ou cortar marcas de pontuação. Você pode executar esse processamento especificando um filtro de token. Há 41 filtros de token diferentes disponíveis, incluindo:

  • Filtros específicos a um idioma, como arabic_normalization. Esses filtros aplicam regras gramaticais específicas do idioma para garantir que as formas de palavras sejam removidas e substituídas por raízes.
  • apóstrofo. Esse filtro remove de um token os apóstrofos e caracteres que vêm após o apóstrofo.
  • clássico. Esse filtro remove os pontos e possessivos do inglês dos acrônimos.
  • manter. Esse filtro remove qualquer token que não inclua uma ou mais palavras de uma lista especificada.
  • extraído. Esse filtro remove qualquer token maior que o mínimo especificado ou menor que o máximo especificado.
  • cortar. Esse filtro remove espaços em branco à esquerda e à direita dos tokens.

Observação

Para obter uma lista completa de filtros de token, confira Adicionar analisadores personalizados aos campos de cadeia de caracteres em um índice da Pesquisa de IA do Azure na seção Saiba mais abaixo.

Criar um analisador personalizado

Você cria um analisador personalizado especificando-o quando define o índice. Você precisa fazer isso com código JSON. Não há como especificar um índice personalizado no portal do Azure. Use a seção analyzers do índice em tempo de design. Você pode incluir apenas um gerador de tokens, mas um ou mais filtros de caracteres e um ou mais filtros de token. Use um nome exclusivo para o analisador e defina a propriedade @odata.type como Microsoft.Azure.Search.CustomAnalyzer.

Neste exemplo, um filtro de caractere remove a formatação HTML, um tokenizador divide o texto de acordo com a gramática islandesa e um filtro de token remove apóstrofos:

"analyzers":(optional)[
   {
      "name":"ContosoAnalyzer",
      "@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer",
      "charFilters":[
         "WebContentRemover"
      ],
      "tokenizer":"IcelandicTokenizer",
      "tokenFilters":[
         "ApostropheFilter"
      ]
   }
],
"charFilters":(optional)[
   {
      "name":"WebContentRemover",
      "@odata.type":"#html_strip"
   }
],
"tokenizers":(optional)[
   {
      "name":"IcelandicTokenizer",
      "@odata.type":"#microsoft_language_tokenizer",
      "language":"icelandic",
      "isSearchTokenizer":false,
   }
],
"tokenFilters":(optional)[
   {
      "name":"ApostropheFilter",
      "@odata.type":"#apostrophe"
   }
]

Testar um analisador personalizado

Depois de definir o analisador personalizado como parte do índice, você pode usar a função Analisar Texto da API REST para enviar texto de teste e garantir que o analisador retorne tokens corretamente. Use qualquer ferramenta de teste REST para formular essas solicitações, como o popular aplicativo Postman.

Suas solicitações REST de teste devem ter esta aparência:

POST https://<search service name>.search.windows.net/indexes/<index name>/analyze?api-version=<api-version>
   Content-Type: application/json
   api-key: <api key>

Nesta solicitação:

  • Substitua <search service name> pelo nome do recurso da Pesquisa de IA.
  • Substitua <index name> pelo nome do índice que inclui o analisador personalizado.
  • Substitua <api-version> pelo número de versão da API REST.
  • Substitua <api-key> pela chave de acesso para o recurso da Pesquisa de IA. Obtenha essa chave no portal do Azure.

Sua solicitação também precisa incluir um corpo JSON como este:

{
  "text": "Test text to analyze.",
  "analyzer": "<analyzer name>"
}

Substitua <analyzer name> pelo nome especificado quando você definiu o analisador personalizado. Certifique-se de testar com muitos valores de text diferentes até ter certeza de que o analisador personalizado se comporta conforme o esperado.

Usar um analisador personalizado para um campo

Depois de definir e testar um analisador personalizado, você poderá configurar o índice para usá-lo. Você pode especificar um analisador para cada campo em seu índice.

Você poderá usar o campo analyzer quando quiser usar o mesmo analisador para indexação e pesquisa:

"fields": [
 {
   "name": "IcelandicDescription",
   "type": "Edm.String",
   "retrievable": true,
   "searchable": true,
   "analyzer": "ContosoAnalyzer",
   "indexAnalyzer": null,
   "searchAnalyzer": null
 },

Também é possível usar um analisador diferente ao indexar o campo e ao pesquisar o campo. Use esta configuração se precisar de um conjunto diferente de etapas de processamento ao indexar um campo durante a análise de uma consulta:

"fields": [
 {
   "name": "IcelandicDescription",
   "type": "Edm.String",
   "retrievable": true,
   "searchable": true,
   "analyzer": null,
   "indexAnalyzer": "ContosoIndexAnalyzer",
   "searchAnalyzer": "ContosoSearchAnalyzer"
 },