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.

  1. 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"
       ...
     }
    ]
    
  2. 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 normalizacje1 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.
Wielkie 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.

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_1char_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
        }
     ]
  }

Zobacz też