Melhorar um índice com analisadores e termos tokenizados

Concluído

O Azure AI Search é configurado 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ê tiver campos incomuns ou exclusivos, convém configurar exatamente como o texto é analisado.

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

Quando o AI Search indexa seu conteúdo, ele recupera texto. Para criar um índice útil, com termos que ajudem os usuários a localizar documentos, esse texto precisa ser processado. Por exemplo:

  • O texto deve ser dividido em palavras, muitas vezes usando espaços em branco e caracteres de pontuação como delimitadores.
  • As palavras de paragem, como "o" e "it", devem ser removidas porque os utilizadores não as procuram.
  • As palavras devem ser reduzidas à sua forma raiz. Por exemplo, palavras do pretérito, como "correu", devem ser substituídas por palavras do tempo presente, como "correr".

No AI Search, esse tipo de processamento é realizado 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 escolha para a maioria dos campos porque pode processar muitos idiomas e retornar tokens úteis para o seu índice.

Como alternativa, você pode especificar um dos analisadores que são incorporados no AI Search. Os analisadores integrados são de dois tipos:

  • Analisadores de linguagem. Se você precisar de recursos avançados para idiomas específicos, como lemmatização, decomposição de palavras e reconhecimento de entidades, use um analisador de linguagem integrado. A Microsoft fornece 50 analisadores para diferentes idiomas.
  • Analisadores especializados. Esses analisadores são independentes da linguagem e usados para campos especializados, como códigos postais ou IDs de produtos. 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 integrados fornecem muitas opções, mas às vezes você precisa de um analisador com comportamento incomum para um campo. Nesses casos, você pode criar um analisador personalizado.

Um analisador personalizado consiste em:

  • Filtros de caracteres. Esses filtros processam uma cadeia de caracteres antes que ela chegue ao tokenizador.
  • Tokenizadores. Esses componentes dividem o texto em tokens a serem adicionados ao índice.
  • Filtros de token. Esses filtros removem ou modificam os tokens emitidos pelo tokenizador.

Vamos examinar esses componentes com mais detalhes.

Filtros de caracteres

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

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

Tokenizadores

O tokenizador é o componente que divide o texto nos tokens que serão armazenados no índice. Os tokenizadores também dividem as palavras em suas formas raiz. Muitas vezes, um token é uma única palavra, mas você pode querer criar tokens incomuns, como:

  • Um endereço postal completo.
  • Um URL completo ou endereço de e-mail.
  • Palavras baseadas na gramática de uma língua específica.

Existem 13 tokenizadores diferentes para escolher. Esses tokenizadores incluem:

  • clássico. Este tokenizador processa texto com base na gramática para idiomas europeus.
  • palavra-chave. Este tokenizador emite toda a entrada como um único token. Use este tokenizador para campos que devem ser sempre indexados como um valor.
  • minúsculas. Este tokenizador divide o texto em não-letras e, em seguida, modifica os tokens resultantes para todas as letras minúsculas.
  • microsoft_language_tokenizer. Este tokenizador divide o texto com base na gramática do idioma especificado.
  • padrão. Este tokenizador divide textos onde corresponde a uma expressão regular que você especificar.
  • espaço em branco. Este tokenizador divide o texto onde quer que haja espaço em branco.

Nota

Para obter uma lista completa de tokenizadores, consulte Adicionar analisadores personalizados a campos de cadeia de caracteres em um índice do Azure AI Search na seção Saiba mais abaixo.

Filtros de token

Depois que o tokenizador tiver dividido o texto recebido em tokens, você pode adicionar algum processamento extra, como remover palavras paradas ou cortar sinais de pontuação. Você pode executar esse processamento especificando um filtro de token. Existem quarenta e um filtros de token diferentes disponíveis, incluindo:

  • Filtros específicos do 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. Este filtro remove qualquer apóstrofo de um token e quaisquer caracteres após o apóstrofo.
  • clássico. Este filtro remove possessivos e pontos em inglês das siglas.
  • manter. Esse filtro remove qualquer token que não inclua uma ou mais palavras de uma lista especificada.
  • comprimento. Este filtro remove qualquer token que seja maior do que o mínimo especificado ou mais curto do que o máximo especificado.
  • guarnição. Este filtro remove qualquer espaço em branco à esquerda e à direita dos tokens.

Nota

Para obter uma lista completa de filtros de token, consulte Adicionar analisadores personalizados a campos de cadeia de caracteres em um índice do Azure AI Search na seção Saiba mais abaixo.

Criar um analisador personalizado

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

Neste exemplo, um filtro de caracteres remove a formatação HTML, um tokenizador divide o texto de acordo com a gramática do islandês 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>

Neste pedido:

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

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

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

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

Usar um analisador personalizado para um campo

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

Você pode usar o analyzer campo 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 para quando analisar uma consulta:

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

Mais informações

Adicionar analisadores personalizados a campos de cadeia de caracteres em um índice do Azure AI Search