Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Uwaga
Wyszukiwanie AI platformy Azure jest dostępna za pośrednictwem portalu Azure, interfejsów API REST i Azure SDKs. Jest także podstawą Foundry IQ — zarządzanej warstwy wiedzy, która przekształca treści przedsiębiorstwa w bazy wiedzy wielokrotnego użytku z uwzględnieniem uprawnień dla agentów w portalu Microsoft Foundry.
W Wyszukiwanie AI platformy Azure element normalizer to składnik, który wstępnie przetwarza tekst pod kątem dopasowywania słów kluczowych w polach oznaczonych jako "filterable", "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 powodować nieoczekiwane wyniki, gdy występują różnice w wielkości liter i znakach, dlatego potrzebny jest normalizator do ujednolicenia treś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 spacje 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 odbywa się na treści tokenizowanej, jak ma to miejsce w przypadku wywoływania "wyszukiwania", lub na treści nietokenizowanej, jeśli żądanie jest filtrem, facetem lub operacją sortowania.
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żmy następujące przykłady:
$filter=City eq 'Las Vegas'zwracają tylko dokumenty zawierające dokładny tekst"Las Vegas"i wykluczają dokumenty zawierające"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:5zwróci"Las Vegas","LAS VEGAS"i"las vegas"jako odrębne wartości, pomimo że jest to to samo miasto.search=usa&$orderby=Cityzwró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 przeprowadzania zapytań, dodaje lekkie przekształcenia, które eliminują drobne różnice w tekście dla scenariuszy filtrowania, fakturowania i sortowania. W poprzednich przykładach warianty "Las Vegas" będą przetwarzane zgodnie z wybranym normalizatorem (na przykład cały tekst jest pisany małymi literami), aby uzyskać bardziej jednolite wyniki.
Jak określić normalizator
Normalizatory są określane w definicji indeksu dla poszczególnych pól tekstowych (Edm.String i Collection(Edm.String)), które mają przynajmniej jedną z właściwości "filtrowalne", "sortowalne" lub "facetable" ustawioną na wartość true. Ustawienie modułu normalizatora jest opcjonalne i domyślnie ma wartość null. Zalecamy ocenę wstępnie zdefiniowanych normalizacji przed skonfigurowaniem niestandardowego.
Normalizatory można określić tylko podczas dodawania nowego pola do indeksu, więc jeśli to możliwe, spróbuj ocenić potrzeby normalizacji z góry i przypisać normalizatory w początkowych etapach rozwoju, gdy upuszczanie i ponowne tworzenie 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 normalizatory
Wyszukiwanie AI platformy Azure zapewnia 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 normalizatory1 | 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.
Testowanie normalizatora
Możesz użyć analizatora testów (REST), aby zobaczyć, jak normalizator przetwarza dane wejściowe.
Żądanie
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"
}
Odpowiedzi
HTTP/1.1 200 OK
{
"tokens": [
{
"token": "Vis-a-vis means Opposite",
"startOffset": 0,
"endOffset": 24,
"position": 0
}
]
}
Odwołanie do normalizatorów
Wstępnie zdefiniowane normalizatory
| Nazwa | Opis i opcje |
|---|---|
| standard | Konwertuje tekst na małe litery, a następnie przeprowadza asciifolding. |
| małe litery | Przekształca znaki w małe litery. |
| wielkie litery | Przekształca znaki w wielkie litery. |
| składanie znaków ASCII | 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 elizję z początku tokenów. |
Obsługiwane filtry znaków
Normalizatory obsługują dwa filtry znaków, które są 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
- normalizacja niemiecka
- hindi_normalization
- indic_normalization
- normalizacja_perska
- scandinavian_normalization
- scandinavian_folding
- sorani_normalization
- Małe litery
- Duże litery
Dodawanie niestandardowych normalizatorów
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.
Nazwa filtru tokenu to token_filter_name_1, a char_filter_name_1 i char_filter_name_2 to nazwy filtrów znaków (zobacz tabele obsługiwanych filtrów tokenów i obsługiwanych filtrów znakó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 normalizatory można dodawać podczas tworzenia indeksu lub później, aktualizując istniejące. 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 normalizatora
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: elizja, filtr małych liter oraz dostosowany filtr asciifolding o nazwie "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
}
]
}