Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Em Pesquisa de IA do Azure, um normalizador é um componente que pré-processa o texto para correspondência de palavras-chave em campos marcados como "filtrável", "facetable" ou "sortable". Em contraste com os campos "pesquisáveis" em texto completo que são emparelhados com analisadores de texto, o conteúdo criado para operações de filtragem e ordenação de facetas não é alvo de análise ou tokenização. A omissão da análise de texto pode levar a resultados inesperados quando surgem diferenças de maiúsculas e de caracteres: por isso é necessário um normalizador para homogeneizar as variações no seu conteúdo.
Ao aplicar um normalizador, pode obter transformações de texto leve que melhoram os resultados:
- Maiúscula consistente (como todas minúsculas ou maiúsculas)
- Normalize acentos e diacríticos como ö ou ê para caracteres equivalentes ASCII "o" e "e"
- Mapear caracteres como
-e espaços em branco para um carácter especificado pelo utilizador.
Benefícios dos normalizadores
Pesquisar e recuperar documentos de um índice de pesquisa requer que a entrada da consulta corresponda ao conteúdo do documento. A correspondência ocorre sobre conteúdo tokenizado, como acontece quando invoca "pesquisa", ou sobre conteúdo não tokenizado se o pedido 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 claramente distintos. Considere os seguintes exemplos:
$filter=City eq 'Las Vegas'Só devolve documentos que contenham o texto"Las Vegas"exato e exclui documentos com"LAS VEGAS"e"las vegas", o que é inadequado quando o caso de uso exige todos os documentos, independentemente do caso.search=*&facet=City,count:5Vai regressar"Las Vegas","LAS VEGAS"e"las vegas"como valores distintos apesar de serem a mesma cidade.search=usa&$orderby=Citydevolverá as cidades por ordem lexicográfica:"Las Vegas","Seattle","las vegas", mesmo que a intenção seja ordenar as mesmas cidades juntas, independentemente do caso.
Um normalizador, que é invocado durante a indexação e execução da consulta, adiciona transformações leves que suavizam pequenas diferenças de texto para cenários de filtro, faceta e ordenação. Nos exemplos anteriores, as variantes de "Las Vegas" seriam processadas de acordo com o normalizador selecionado (por exemplo, todo o texto está em minúsculas) para resultados mais uniformes.
Como especificar um normalizador
Os normalizadores são especificados numa definição de índice, por campo, em campos de texto (Edm.String e Collection(Edm.String)) que tenham pelo menos uma das propriedades "filtrável", "ordenável" ou "facetable" definidas como verdadeiras. Definir um normalizador é opcional e é nulo por defeito. Recomendamos avaliar normalizadores pré-definidos antes de configurar um personalizado.
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 desde o início e atribua normalizadores nas fases iniciais de desenvolvimento, quando eliminar e recriar índices for rotina.
Ao criar uma definição de campo no índice, defina a propriedade "normalizador" para um dos seguintes valores: um normalizador pré-definido 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" ... } ]Normalizadores personalizados são definidos primeiro na secção "normalizadores" do índice e depois atribuídos à definição do campo conforme mostrado no passo anterior. Para 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 completamente o índice (não pode reconstruir campos individuais).
Uma boa solução alternativa para índices de produção, onde reconstruir índices é dispendioso, é criar um campo novo 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 planeada do índice, pode limpar o índice para remover campos obsoletos.
Normalizadores pré-definidos e personalizados
O Pesquisa de IA do Azure fornece normalizadores incorporados para casos de uso comuns, juntamente com a capacidade de personalizar conforme necessário.
| Categoria | Descrição |
|---|---|
| Normalizadores predefinidos | Fornecido de fábrica e pode ser usado sem qualquer configuração. |
| Normalizadores personalizados1 | Para cenários avançados. Requer a configuração definida pelo utilizador de uma combinação de elementos existentes, consistindo em filtros de char e token. |
(1) Normalizadores personalizados não especificam tokenizadores, uma vez que os normalizadores produzem sempre um único token.
Testar um normalizador
Pode usar o Analisador de Teste (REST) para ver como um normalizador processa uma entrada.
Pedido
POST https://[search service name].search.windows.net/indexes/[index name]/analyze?api-version=[api-version]
Content-Type: application/json
api-key: [admin key]
{
"normalizer":"asciifolding",
"text": "Vis-à-vis means Opposite"
}
Resposta
HTTP/1.1 200 OK
{
"tokens": [
{
"token": "Vis-a-vis means Opposite",
"startOffset": 0,
"endOffset": 24,
"position": 0
}
]
}
Referência de normalizadores
Normalizadores predefinidos
| Nome | Descrição e Opções |
|---|---|
| norma | Coloca o texto em minúsculas, seguido por asciifolding. |
| em minúsculas | Transforma os caracteres em minúsculas. |
| em maiúscula(s) | Transforma os caracteres em maiúsculas. |
| asciifolding | Transforma caracteres que não estão no bloco Unicode Latino Básico para o seu equivalente ASCII, caso exista. Por exemplo, mudando à para a. |
| elisão | Remova a elisão do início dos tokens. |
Filtros de caracteres suportados
Os normalizadores suportam dois filtros de caracteres que são idênticos aos seus equivalentes em filtros de caracteres de analisadores personalizados:
Filtros de tokens suportados
A lista abaixo mostra os filtros de tokens suportados para normalizadores e é um subconjunto dos filtros globais de tokens usados em analisadores personalizados.
- normalização_arabe
- asciifolding
- cjk_width
- elisão
- normalização_alemã
- hindi_normalization
- indic_normalization
- persian_normalization
- scandinavian_normalization
- scandinavian_folding
- sorani_normalization
- minúsculas
- Maiúsculas
Adicionar normalizadores personalizados
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 os filtros de token são os blocos de construção de 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 é o nome do filtro de token, e char_filter_name_1 e char_filter_name_2 são os nomes dos filtros de caracteres (ver tabelas abaixo dos filtros de tokens suportados e dos filtros de caracteres suportadospara 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",
...
}
]
Normalizadores personalizados podem ser adicionados durante a criação do índice ou mais tarde, atualizando um já 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 durante alguns segundos.
Exemplo de normalizador personalizado
O exemplo abaixo ilustra uma definição personalizada de normalizador com filtros de caracteres e filtros de token correspondentes. Opções personalizadas para filtros de caracteres e filtros de token são especificadas separadamente como construções nomeadas, e depois referenciadas na definição do normalizador, como ilustrado abaixo.
Um normalizador personalizado chamado "my_custom_normalizer" é definido na secção "normalizadores" da definição do índice.
O normalizador é composto por dois filtros de caracteres e três filtros de token: elisão, minúsculas e filtro personalizado de asciifolding "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
}
]
}