Normalizacja tekstu w przypadku filtrowania bez uwzględniania wielkości liter, tworzenia aspektów i sortowania
Ważne
Ta funkcja jest dostępna w publicznej wersji zapoznawczej w obszarze Dodatkowe warunki użytkowania. Interfejs API REST w wersji zapoznawczej obsługuje tę funkcję.
W usłudze Azure AI Search normalizator to składnik, który wstępnie przetwarza tekst pasujący do słów kluczowych dla pól oznaczonych jako "filtrowalny", "facetable" lub "sortable". W przeciwieństwie do pól pełnotekstowych "z możliwością wyszukiwania", które są sparowane z analizatorami tekstu, zawartość utworzona na potrzeby operacji sortowania filtru-faceta nie jest poddawana analizie ani tokenizacji. Pominięcie analizy tekstu może spowodować wyświetlenie nieoczekiwanych wyników, gdy pojawiają się różnice wielkości liter i znaków, dlatego potrzebny jest normalizator do homogenizowania odmian w zawartości.
Stosując normalizator, można uzyskać lekkie przekształcenia tekstu, które zwiększają wyniki:
- Spójna wielkość liter (na przykład wszystkie małe lub wielkie litery)
- Normalizuj akcenty i znaki diakrytyczne, takie jak ö lub ê do znaków równoważnych ASCII "o" i "e"
- Mapuj znaki takie jak
-
i odstępy na znak określony przez użytkownika
Korzyści wynikające z normalizacji
Wyszukiwanie i pobieranie dokumentów z indeksu wyszukiwania wymaga dopasowania danych wejściowych zapytania do zawartości dokumentu. Dopasowywanie jest za pośrednictwem zawartości tokenizowanej, podobnie jak w przypadku wywoływania "wyszukiwania" lub za pośrednictwem nie tokenizowanej zawartości, jeśli żądanie jest filtrem, aspektem lub operacją orderby.
Ponieważ nie tokenizowana zawartość nie jest również analizowana, małe różnice w zawartości są oceniane jako wyraźnie różne wartości. Rozważ następujące przykłady:
$filter=City eq 'Las Vegas'
Zwraca tylko dokumenty zawierające dokładny tekst"Las Vegas"
i wykluczają dokumenty z elementami"LAS VEGAS"
i"las vegas"
, co jest nieodpowiednie, gdy przypadek użycia wymaga wszystkich dokumentów niezależnie od wielkości liter.search=*&facet=City,count:5
funkcja zwróci"Las Vegas"
wartości ,"LAS VEGAS"
a"las vegas"
jako odrębne wartości pomimo tego, że jest to to samo miasto.search=usa&$orderby=City
zwróci miasta w porządku leksykologicznym:"Las Vegas"
,"Seattle"
,"las vegas"
nawet jeśli zamiarem jest zamówienie tych samych miast razem niezależnie od przypadku.
Normalizator, który jest wywoływany podczas indeksowania i wykonywania zapytań, dodaje lekkie przekształcenia, które wygłaszają drobne różnice w tekście dla scenariuszy filtrowania, aspektu i sortowania. W poprzednich przykładach warianty "Las Vegas"
będą przetwarzane zgodnie z wybranym normalizatorem (na przykład cały tekst jest mniejszy) w celu uzyskania bardziej jednolitych wyników.
Jak określić normalizator
Normalizacje są określane w definicji indeksu dla poszczególnych pól w polach tekstowych (Edm.String
i Collection(Edm.String)
), które mają co najmniej jedną z właściwości "filtrowalne", "sortowalne" lub "facetable" ustawione na wartość true. Ustawienie modułu normalizatora jest opcjonalne i domyślnie ma wartość null. Zalecamy ocenę wstępnie zdefiniowanych normalizacji przed skonfigurowaniem niestandardowego.
Normalizacje można określić tylko podczas dodawania nowego pola do indeksu, więc jeśli to możliwe, spróbuj ocenić normalizację wymaga z góry i przypisać normalatory w początkowych etapach programowania podczas upuszczania i ponownego tworzenia indeksów jest rutynowe.
Podczas tworzenia definicji pola w indeksie ustaw właściwość "normalizer" na jedną z następujących wartości: wstępnie zdefiniowany normalizator, taki jak "małe litery" lub niestandardowy normalizator (zdefiniowany w tym samym schemacie indeksu).
"fields": [ { "name": "Description", "type": "Edm.String", "retrievable": true, "searchable": true, "filterable": true, "analyzer": "en.microsoft", "normalizer": "lowercase" ... } ]
Niestandardowe normalizacje są definiowane w sekcji "normalizers" indeksu najpierw, a następnie przypisane do definicji pola, jak pokazano w poprzednim kroku. Aby uzyskać więcej informacji, zobacz Create Index (Tworzenie indeksu ), a także Add custom normalizers (Dodawanie niestandardowych normalizacji).
"fields": [ { "name": "Description", "type": "Edm.String", "retrievable": true, "searchable": true, "analyzer": null, "normalizer": "my_custom_normalizer" },
Uwaga
Aby zmienić normalizator istniejącego pola, ponownie skompiluj indeks w całości (nie można ponownie skompilować poszczególnych pól).
Dobrym obejściem dla indeksów produkcyjnych, gdzie ponowne kompilowanie indeksów jest kosztowne, jest utworzenie nowego pola identycznego ze starym, ale z nowym normalizatorem i użycie go zamiast starego. Użyj indeksu aktualizacji, aby dołączyć nowe pole i scalanieOrUpload , aby je wypełnić. Później w ramach planowanej obsługi indeksu można wyczyścić indeks, aby usunąć przestarzałe pola.
Wstępnie zdefiniowane i niestandardowe normalizacje
Usługa Azure AI Search udostępnia wbudowane normalizacje dla typowych przypadków użycia wraz z możliwością dostosowywania zgodnie z potrzebami.
Kategoria | opis |
---|---|
Wstępnie zdefiniowane normalizacje | Dostarczone gotowe do użycia i mogą być używane bez żadnej konfiguracji. |
Niestandardowe normalizacje 1 | W przypadku zaawansowanych scenariuszy. Wymaga konfiguracji zdefiniowanej przez użytkownika kombinacji istniejących elementów składających się z filtrów znaków i tokenów. |
(1) Niestandardowe normalizacje nie określają tokenizatorów, ponieważ normalizatory zawsze tworzą pojedynczy token.
Odwołanie do normalizacji
Wstępnie zdefiniowane normalizacje
Nazwa/nazwisko | Opis i opcje |
---|---|
standardowa | Małe litery tekstu, a następnie asciifolding. |
Małe litery | Przekształca znaki w małe litery. |
wielka litera | Przekształca znaki w wielkie litery. |
asciifolding | Przekształca znaki, które nie są w bloku Basic Latin Unicode, do ich odpowiednika ASCII, jeśli istnieje. Na przykład zmiana à na a . |
elizja | Usuwa elision od początku tokenów. |
Obsługiwane filtry znaków
Normalizacje obsługują dwa filtry znaków identyczne z ich odpowiednikami w filtrach znaków analizatora niestandardowego:
Obsługiwane filtry tokenów
Na poniższej liście przedstawiono filtry tokenów obsługiwane dla normalizacji i jest podzbiorem ogólnych filtrów tokenów używanych w analizatorach niestandardowych.
- arabic_normalization
- asciifolding
- cjk_width
- elizja
- german_normalization
- hindi_normalization
- indic_normalization
- persian_normalization
- scandinavian_normalization
- scandinavian_folding
- sorani_normalization
- Małe litery
- wielka litera
Dodawanie niestandardowych normalizacji
Niestandardowe normalizacje są definiowane w schemacie indeksu. Definicja zawiera nazwę, typ, co najmniej jeden filtr znaków i filtry tokenu. Filtry znaków i filtry tokenów to bloki konstrukcyjne niestandardowego normalizatora i odpowiedzialne za przetwarzanie tekstu. Te filtry są stosowane od lewej do prawej.
Jest token_filter_name_1
to nazwa filtru tokenu i char_filter_name_1
char_filter_name_2
są nazwami filtrów znaków (zobacz obsługiwane filtry tokenów i obsługiwane tabele filtrówznaków poniżej, aby uzyskać prawidłowe wartości).
"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",
...
}
]
Niestandardowe normalizacje można dodawać podczas tworzenia indeksu lub nowszego, aktualizując istniejącą. Dodanie niestandardowego normalizatora do istniejącego indeksu wymaga określenia flagi "allowIndexDowntime" w indeksie aktualizacji i spowoduje niedostępność indeksu przez kilka sekund.
Przykład niestandardowego normalizacji
W poniższym przykładzie przedstawiono niestandardową definicję normalizatora z odpowiednimi filtrami znaków i filtrami tokenów. Opcje niestandardowe filtrów znaków i filtrów tokenów są określane oddzielnie jako konstrukcje nazwane, a następnie przywołyane w definicji normalizatora, jak pokazano poniżej.
Niestandardowy normalizator o nazwie "my_custom_normalizer" jest definiowany w sekcji "normalizers" definicji indeksu.
Normalizator składa się z dwóch filtrów znaków i trzech filtrów tokenów: elision, małe litery i dostosowany filtr asciifolding "my_asciifolding".
Pierwszy filtr znaków "map_dash" zastępuje wszystkie kreski podkreśleniami, a drugi "remove_whitespace" usuwa wszystkie spacje.
{
"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
}
]
}