Normalização de texto para filtragem, frontalidade e triagem de casos insensíveis

Importante

Esta funcionalidade encontra-se em pré-visualização pública nos Termos Complementares de Utilização. A pré-visualização REST API suporta esta funcionalidade.

Em Azure Cognitive Search, um normalizador é um componente que pré-processa texto para palavras-chave que combinam com campos marcados como "filtratáveis", "facetable" ou "ordenados". 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 tipo de faceta de filtro não é submetido a análise ou tokenização. A omissão da análise de texto pode produzir resultados inesperados quando o invólucro e as diferenças de carácter aparecem.

Ao aplicar um normalizador, pode obter transformações de texto leve que melhorem os resultados:

  • Invólucro consistente (como todos os maiúsculas ou maiúsculas)
  • Normalizar sotaques e diacríticos como ö ou ê aos caracteres equivalentes ASCII "o" e "e"
  • Mapear caracteres como - e whitespace em um caráter especificado pelo utilizador

Benefícios dos normalizadores

Procurar e recuperar documentos de um índice de pesquisa requer a correspondência da entrada de consulta com o conteúdo do documento. A correspondência é sobre conteúdo tokenizado, como é o caso quando invoca "pesquisa", ou sobre conteúdo não simbólico se o pedido for um filtro, faceta ou operação de encomenda .

Como o conteúdo não simbólico 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 exato "Las Vegas" e exclua 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 devolver "Las Vegas", "LAS VEGAS" e "las vegas" como valores distintos, apesar de ser a mesma cidade.

  • search=usa&$orderby=City vai devolver as cidades por ordem lexicográfica: "Las Vegas", "Seattle", "las vegas", mesmo que a intenção seja encomendar as mesmas cidades juntos, independentemente do caso.

Um normalizador, que é invocado durante a indexação e execução de consultas, adiciona transformações leves que suavizam pequenas diferenças de texto para filtrar, faceta e classificar cenários. Nos exemplos anteriores, as variantes de "Las Vegas" seriam processadas de acordo com o normalizador que seleciona (por exemplo, todo o texto é mais baixo) para obter resultados mais uniformes.

Como especificar um normalizador

Os normalizadores são especificados numa definição de índice, numa base por campo, em campos de texto (Edm.String e Collection(Edm.String)) que têm pelo menos uma das propriedades "filtratáveis", "ordenadas" ou "facetable" definidas como verdadeiras. Definir um normalizador é opcional e é nulo por padrão. Recomendamos avaliar os normalizadores predefinidos antes de configurar um personalizado.

Os normalizadores só podem ser especificados quando se adiciona um novo campo ao índice, por isso, se possível, tente avaliar as necessidades de normalização antecipadamente e atribuir normalizadores nas fases iniciais de desenvolvimento ao descer e recriar índices é rotina.

  1. Ao criar uma definição de campo no índice, defina a propriedade "normalizador" para um dos seguintes valores: um normalizador predefinido como "minúscula", 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 secção "normalizadores" do índice primeiro e, em seguida, atribuídos à definição de campo como mostrado no passo anterior. Para obter mais informações, consulte Create Index e também Adicione 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, terá de reconstruir completamente o índice (não é possível reconstruir campos individuais).

Uma boa solução para os índices de produção, onde os índices de reconstrução são dispendiosos, é criar um novo campo idêntico ao antigo, mas com o novo normalizador, e usá-lo no lugar do antigo. Utilize o Índice de Atualização para incorporar o novo campo e fundir oOrUpload para o povoar. Mais tarde, como parte da manutenção planeada do índice, pode limpar o índice para remover campos obsoletos.

Normalizadores predefinidos e personalizados

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

Categoria Descrição
Normalizadores predefinidos Fornecido fora da caixa e pode ser usado sem qualquer configuração.
Normalizadores personalizados1 Para cenários avançados. Requer uma configuração definida pelo utilizador de uma combinação de elementos existentes, consistindo de filtros de carvão e ficha.

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

Referência dos normalizadores

Normalizadores predefinidos

Nome Descrição e Opções
padrão Minúsculas o texto seguido de asciifolding.
minúscula Transforma caracteres em minúsculas.
maiúscula Transforma os caracteres em maiúsculas.
asciifolding Transforma personagens que não estão no bloco Basic Latin Unicode para o seu equivalente ASCII, se existir. Por exemplo, mudar à.
elisão Remove a elissão do início dos tokens.

Filtros de carvão suportados

Os normalizadores suportam dois filtros de caracteres idênticos aos seus homólogos em filtros de caracteres de analisador personalizados:

Filtros simbólicos suportados

A lista abaixo mostra os filtros simbólicos suportados para normalizadores e é um subconjunto dos filtros gerais de fichas 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 simbólicos. Os filtros de caracteres e os filtros simbólicos são os blocos de construção para um normalizador personalizado e responsáveis pelo processamento do texto. Estes filtros são aplicados da esquerda para a direita.

O token_filter_name_1 nome do filtro simbólico é o nome do filtro simbólico e char_filter_name_1char_filter_name_2 são os nomes dos filtros de carvão (ver filtros de fichas suportados e quadros de filtros de carvão suportadosabaixo 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 mais tarde atualizando um existente. A adição de um normalizador personalizado a um índice existente requer que a bandeira "allowIndexDowntime" seja especificada no Índice de Atualização e fará com que o índice esteja indisponível durante alguns segundos.

Exemplo de normalizador personalizado

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

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

  • O normalizador é composto por dois filtros de caracteres e três filtros simbólicos: 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
        }
     ]
  }

Ver também