Normalização de texto para filtragem, facetagem e classificação que não diferenciam maiúsculas de minúsculas

Importante

Esta funcionalidade está em pré-visualização pública em Termos de Utilização Suplementares. A API REST de visualização suporta esse recurso.

Na Pesquisa de IA do Azure, um normalizador é um componente que pré-processa texto para correspondência de palavras-chave em campos marcados como "filtrável", "facial" ou "classificável". Em contraste com os campos "pesquisáveis" de texto completo que são emparelhados com analisadores de texto, o conteúdo criado para operações de classificação de facetas de filtro não passa por análise ou tokenização. A omissão da análise de texto pode produzir resultados inesperados quando as diferenças de caixa e caracteres aparecem, e é por isso que você precisa de um normalizador para homogeneizar as variações em seu conteúdo.

Ao aplicar um normalizador, você pode obter transformações de texto leves que melhoram os resultados:

  • Invólucro consistente (como todas as letras minúsculas ou maiúsculas)
  • Normalize acentos e diacríticos como ö ou ê para caracteres equivalentes ASCII "o" e "e"
  • Mapeie caracteres como - e espaço em branco em um caractere especificado pelo usuário

Benefícios dos normalizadores

A pesquisa e a recuperação de documentos a partir de um índice de pesquisa requerem a correspondência entre a entrada da consulta e o conteúdo do documento. A correspondência é sobre conteúdo tokenizado, como é o caso quando você invoca "pesquisa", ou sobre conteúdo não tokenizado se a solicitação for uma operação de filtro, faceta ou orderby .

Como o conteúdo não tokenizado também não é analisado, pequenas diferenças no conteúdo são avaliadas como valores distintamente diferentes. Considere os seguintes exemplos:

  • $filter=City eq 'Las Vegas' só devolverá documentos que contenham o texto "Las Vegas" exato e excluirá documentos com "LAS VEGAS" e "las vegas", o que é inadequado quando o caso de uso requer todos os documentos, independentemente do invólucro.

  • search=*&facet=City,count:5 vai voltar "Las Vegas", "LAS VEGAS" e "las vegas" como valores distintos apesar de ser a mesma cidade.

  • search=usa&$orderby=Cityretornará as cidades em ordem lexicográfica: "Las Vegas", , , mesmo que a intenção seja ordenar as mesmas cidades juntas, "Seattle""las vegas"independentemente do caso.

Um normalizador, que é invocado durante a indexação e a execução da consulta, adiciona transformações leves que suavizam pequenas diferenças no texto para cenários de filtro, faceta e classificação. Nos exemplos anteriores, as variantes de seriam processadas de acordo com o normalizador selecionado "Las Vegas" (por exemplo, todo o texto é minúsculo) para resultados mais uniformes.

Como especificar um normalizador

Os normalizadores são especificados em uma definição de índice, por campo, em campos de texto (Edm.String e Collection(Edm.String)) que têm pelo menos uma das propriedades "filtráveis", "classificáveis" ou "facetable" definidas como true. A configuração de um normalizador é opcional e é nula por padrão. Recomendamos avaliar normalizadores predefinidos antes de configurar um personalizado.

Os normalizadores só podem ser especificados quando você adiciona um novo campo ao índice, portanto, se possível, tente avaliar as necessidades de normalização antecipadamente e atribuir normalizadores nos estágios iniciais de desenvolvimento quando soltar e recriar índices for rotina.

  1. Ao criar uma definição de campo no índice, defina a propriedade "normalizer" para um dos seguintes valores: um normalizador predefinido, como "minúsculas", ou um normalizador personalizado (definido no mesmo esquema de índice).

    "fields": [
     {
       "name": "Description",
       "type": "Edm.String",
       "retrievable": true,
       "searchable": true,
       "filterable": true,
       "analyzer": "en.microsoft",
       "normalizer": "lowercase"
       ...
     }
    ]
    
  2. Os normalizadores personalizados são definidos na seção "normalizadores" do índice primeiro e, em seguida, atribuídos à definição de campo, conforme mostrado na etapa anterior. Para obter mais informações, consulte Criar índice e também Adicionar normalizadores personalizados.

    "fields": [
     {
       "name": "Description",
       "type": "Edm.String",
       "retrievable": true,
       "searchable": true,
       "analyzer": null,
       "normalizer": "my_custom_normalizer"
     },
    

Nota

Para alterar o normalizador de um campo existente, reconstrua o índice inteiramente (não é possível reconstruir campos individuais).

Uma boa solução para índices de produção, onde a reconstrução de índices é cara, é criar um novo campo idêntico ao antigo, mas com o novo normalizador, e usá-lo no lugar do antigo. Use Update Index para incorporar o novo campo e mergeOrUpload para preenchê-lo. Mais tarde, como parte da manutenção de índice planejada, você pode limpar o índice para remover campos obsoletos.

Normalizadores predefinidos e personalizados

O Azure AI Search fornece normalizadores internos para casos de uso comuns, juntamente com a capacidade de personalizar conforme necessário.

Category Description
Normalizadores predefinidos Fornecido pronto para uso e pode ser usado sem qualquer configuração.
Normalizadorespersonalizados 1 Para cenários avançados. Requer a configuração definida pelo usuário de uma combinação de elementos existentes, consistindo em filtros char e token.

(1) Os normalizadores personalizados não especificam tokenizadores, uma vez que os normalizadores sempre produzem um único token.

Referência dos normalizadores

Normalizadores predefinidos

Nome Descrição e Opções
padrão Texto em minúsculas seguido de asciifolding.
minúsculas Transforma caracteres em minúsculas.
maiúsculas Transforma caracteres em maiúsculas.
asciifolding Transforma caracteres que não estão no bloco Unicode latino básico em seu equivalente ASCII, se existir. Por exemplo, mudar à para a.
elisão Remove elisão do início dos tokens.

Filtros char suportados

Os normalizadores suportam dois filtros de caracteres que são idênticos aos seus homólogos em filtros de caracteres do analisador personalizado:

Filtros de token suportados

A lista abaixo mostra os filtros de token suportados para normalizadores e é um subconjunto dos filtros de token gerais usados em analisadores personalizados.

Adicionar normalizadores personalizados

Os normalizadores personalizados são definidos dentro do esquema de índice. A definição inclui um nome, um tipo, um ou mais filtros de caracteres e filtros de token. Os filtros de caracteres e filtros de token são os blocos de construção para um normalizador personalizado e responsável pelo processamento do texto. Estes filtros são aplicados da esquerda para a direita.

O token_filter_name_1 é o nome do filtro de token e e são os nomes dos filtros de char (consulte as tabelas de filtros de token suportados e char_filter_name_2char_filter_name_1 filtros de caracteres suportados abaixo para valores válidos).

"normalizers":(optional)[
   {
      "name":"name of normalizer",
      "@odata.type":"#Microsoft.Azure.Search.CustomNormalizer",
      "charFilters":[
         "char_filter_name_1",
         "char_filter_name_2"
      ],
      "tokenFilters":[
         "token_filter_name_1"
      ]
   }
],
"charFilters":(optional)[
   {
      "name":"char_filter_name_1",
      "@odata.type":"#char_filter_type",
      "option1": "value1",
      "option2": "value2",
      ...
   }
],
"tokenFilters":(optional)[
   {
      "name":"token_filter_name_1",
      "@odata.type":"#token_filter_type",
      "option1": "value1",
      "option2": "value2",
      ...
   }
]

Os normalizadores personalizados podem ser adicionados durante a criação do índice ou posteriormente, atualizando um existente. Adicionar um normalizador personalizado a um índice existente requer que o sinalizador "allowIndexDowntime" seja especificado no Update Index e fará com que o índice fique indisponível por alguns segundos.

Exemplo de normalizador personalizado

O exemplo abaixo ilustra uma definição de normalizador personalizada com filtros de caracteres e filtros de token correspondentes. As opções personalizadas para filtros de caracteres e filtros de token são especificadas separadamente como construções nomeadas e, em seguida, referenciadas na definição do normalizador, conforme ilustrado abaixo.

  • Um normalizador personalizado chamado "my_custom_normalizer" é definido na seção "normalizadores" da definição de índice.

  • O normalizador é composto por dois filtros de caracteres e três filtros de token: elisão, minúscula e filtro asciifolding personalizado "my_asciifolding".

  • O primeiro filtro de caracteres "map_dash" substitui todos os traços por sublinhados, enquanto o segundo "remove_whitespace" remove todos os espaços.

  {
     "name":"myindex",
     "fields":[
        {
           "name":"id",
           "type":"Edm.String",
           "key":true,
           "searchable":false,
        },
        {
           "name":"city",
           "type":"Edm.String",
           "filterable": true,
           "facetable": true,
           "normalizer": "my_custom_normalizer"
        }
     ],
     "normalizers":[
        {
           "name":"my_custom_normalizer",
           "@odata.type":"#Microsoft.Azure.Search.CustomNormalizer",
           "charFilters":[
              "map_dash",
              "remove_whitespace"
           ],
           "tokenFilters":[              
              "my_asciifolding",
              "elision",
              "lowercase",
           ]
        }
     ],
     "charFilters":[
        {
           "name":"map_dash",
           "@odata.type":"#Microsoft.Azure.Search.MappingCharFilter",
           "mappings":["-=>_"]
        },
        {
           "name":"remove_whitespace",
           "@odata.type":"#Microsoft.Azure.Search.MappingCharFilter",
           "mappings":["\\u0020=>"]
        }
     ],
     "tokenFilters":[
        {
           "name":"my_asciifolding",
           "@odata.type":"#Microsoft.Azure.Search.AsciiFoldingTokenFilter",
           "preserveOriginal":true
        }
     ]
  }

Consulte também