Tekstnormalisatie voor hoofdlettergevoelige filtering, facet en sortering

Belangrijk

Deze functie is beschikbaar als openbare preview onder aanvullende gebruiksvoorwaarden. De preview-REST API ondersteunt deze functie.

In Azure AI Search is een normalisatiefunctie een onderdeel dat tekst vooraf verwerkt voor trefwoorden die overeenkomen met velden die zijn gemarkeerd als 'filterbaar', 'facetable' of 'sorteerbaar'. In tegenstelling tot 'doorzoekbare' velden in volledige tekst die zijn gekoppeld aan tekstanalyses, ondergaat de inhoud die is gemaakt voor filter-facet-sorteerbewerkingen geen analyse of tokenisatie. Het weglaten van tekstanalyse kan onverwachte resultaten opleveren wanneer hoofdletters en tekenverschillen worden weergegeven. Daarom hebt u een normalizer nodig om variaties in uw inhoud te homogeniseren.

Door een normalizer toe te passen, kunt u lichte teksttransformaties bereiken die de resultaten verbeteren:

  • Consistent hoofdletters (zoals kleine letters of hoofdletters)
  • Accenten en diakritische tekens, zoals ö of ê, normaliseren naar ascii-equivalente tekens 'o' en 'e'
  • Tekens als - en spaties toewijzen aan een door de gebruiker opgegeven teken

Voordelen van normalizers

Voor het zoeken en ophalen van documenten uit een zoekindex moet de queryinvoer worden afgestemd op de inhoud van het document. Overeenkomende inhoud is overgetokeniseerde inhoud, zoals het geval is wanneer u 'zoeken' aanroept of over niet-tokenized inhoud als de aanvraag een filter-, facet- of orderby-bewerking is.

Omdat niet-tokenized inhoud ook niet wordt geanalyseerd, worden kleine verschillen in de inhoud als verschillend waarden geëvalueerd. Bekijk de volgende voorbeelden:

  • $filter=City eq 'Las Vegas' retourneert alleen documenten die de exacte tekst "Las Vegas" bevatten en documenten uitsluiten met "LAS VEGAS" en "las vegas", wat ontoereikend is wanneer voor de use-case alle documenten zijn vereist, ongeacht de behuizing.

  • search=*&facet=City,count:5retourneert "Las Vegas"en "las vegas""LAS VEGAS" als afzonderlijke waarden ondanks dat deze dezelfde stad zijn.

  • search=usa&$orderby=City zal de steden in lexicografische volgorde retourneren: "Las Vegas", "Seattle", "las vegas", zelfs als de bedoeling is om dezelfde steden samen te orden, ongeacht het geval.

Een normalizer, die wordt aangeroepen tijdens het indexeren en uitvoeren van query's, voegt lichte transformaties toe waarmee kleine verschillen in tekst voor filter-, facet- en sorteerscenario's worden uitgevlakt. In de vorige voorbeelden worden de varianten verwerkt "Las Vegas" volgens de normalizer die u selecteert (bijvoorbeeld alle tekst is kleine letters) voor uniformere resultaten.

Een normalizer opgeven

Normalizers worden opgegeven in een indexdefinitie, per veld, op tekstvelden (Edm.String en Collection(Edm.String)) met ten minste één van de eigenschappen 'filterbaar', 'sorteerbaar' of 'facetable' ingesteld op waar. Het instellen van een normalizer is optioneel en is standaard null. U wordt aangeraden vooraf gedefinieerde normalizers te evalueren voordat u een aangepaste normalisatiefunctie configureert.

Normalizers kunnen alleen worden opgegeven wanneer u een nieuw veld toevoegt aan de index. Probeer, indien mogelijk, de normalisatiebehoeften vooraf te beoordelen en wijs normalizers toe in de eerste fasen van ontwikkeling wanneer indexen worden verwijderd en opnieuw worden gecreërd, is routine.

  1. Wanneer u een velddefinitie in de index maakt, stelt u de eigenschap normalizer in op een van de volgende waarden: een vooraf gedefinieerde normalizer , zoals 'kleine letters', of een aangepaste normalisatiefunctie (gedefinieerd in hetzelfde indexschema).

    "fields": [
     {
       "name": "Description",
       "type": "Edm.String",
       "retrievable": true,
       "searchable": true,
       "filterable": true,
       "analyzer": "en.microsoft",
       "normalizer": "lowercase"
       ...
     }
    ]
    
  2. Aangepaste normalizers worden gedefinieerd in de sectie normalizers van de index en vervolgens toegewezen aan de velddefinitie, zoals wordt weergegeven in de vorige stap. Zie Index maken en aangepaste normalizers toevoegen voor meer informatie.

    "fields": [
     {
       "name": "Description",
       "type": "Edm.String",
       "retrievable": true,
       "searchable": true,
       "analyzer": null,
       "normalizer": "my_custom_normalizer"
     },
    

Notitie

Als u de normalisatiefunctie van een bestaand veld wilt wijzigen, bouwt u de index geheel opnieuw (u kunt afzonderlijke velden niet opnieuw opbouwen).

Een goede tijdelijke oplossing voor productie-indexen, waarbij het herbouwen van indexen kostbaar is, is het maken van een nieuw veld dat identiek is aan de oude, maar met de nieuwe normalizer, en deze gebruiken in plaats van de oude. Gebruik Update-index om het nieuwe veld op te nemen en mergeOrUpload te vullen. Later kunt u, als onderdeel van gepland indexonderhoud, de index opschonen om verouderde velden te verwijderen.

Vooraf gedefinieerde en aangepaste normalizers

Azure AI Search biedt ingebouwde normalizers voor algemene gebruiksvoorbeelden, samen met de mogelijkheid om naar wens aan te passen.

Categorie Beschrijving
Vooraf gedefinieerde normalizers Geleverd out-of-the-box en kan zonder configuratie worden gebruikt.
Aangepaste normalizers1 Voor geavanceerde scenario's. Vereist door de gebruiker gedefinieerde configuratie van een combinatie van bestaande elementen, bestaande uit teken- en tokenfilters.

(1) Aangepaste normalizers geven geen tokenizers op, omdat normalizers altijd één token produceren.

Naslaginformatie over normalizers

Vooraf gedefinieerde normalizers

Naam Beschrijving en opties
standard Hiermee wordt de tekst in kleine letters weergegeven, gevolgd door asciifolding.
Kleine letters Transformeert tekens naar kleine letters.
Hoofdletters Transformeert tekens naar hoofdletters.
asciifolding Transformeert tekens die zich niet in het Latijnse Unicode-basisblok bevinden naar hun ASCII-equivalent, indien aanwezig. Bijvoorbeeld wijzigen in àa.
elision Verwijdert elision vanaf het begin van de tokens.

Ondersteunde tekenfilters

Normalizers ondersteunen twee tekenfilters die identiek zijn aan hun tegenhangers in aangepaste analysetekenfilters:

Ondersteunde tokenfilters

De onderstaande lijst toont de tokenfilters die worden ondersteund voor normalizers en is een subset van de algemene tokenfilters die worden gebruikt in aangepaste analyse.

Aangepaste normalizers toevoegen

Aangepaste normalizers worden gedefinieerd in het indexschema. De definitie bevat een naam, een type, een of meer tekenfilters en tokenfilters. De tekenfilters en tokenfilters zijn de bouwstenen voor een aangepaste normalizer en verantwoordelijk voor de verwerking van de tekst. Deze filters worden van links naar rechts toegepast.

Dit token_filter_name_1 is de naam van het tokenfilter en char_filter_name_1char_filter_name_2 zijn de namen van tekenfilters (zie ondersteunde tokenfilters en ondersteunde tekenfiltertabellenhieronder voor geldige waarden).

"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",
      ...
   }
]

Aangepaste normalizers kunnen worden toegevoegd tijdens het maken van de index of later door een bestaande bij te werken. Als u een aangepaste normalisatiefunctie toevoegt aan een bestaande index, moet de vlag allowIndexDowntime worden opgegeven in Update Index en wordt de index enkele seconden niet beschikbaar.

Voorbeeld van aangepaste normalizer

In het onderstaande voorbeeld ziet u een aangepaste normalizerdefinitie met bijbehorende tekenfilters en tokenfilters. Aangepaste opties voor tekenfilters en tokenfilters worden afzonderlijk opgegeven als benoemde constructies en vervolgens naar de normalizerdefinitie verwezen, zoals hieronder wordt geïllustreerd.

  • Een aangepaste normalizer met de naam 'my_custom_normalizer' wordt gedefinieerd in de sectie normalizers van de indexdefinitie.

  • De normalizer bestaat uit twee tekenfilters en drie tokenfilters: elision, lowercase en customized asciifolding filter "my_asciifolding".

  • Met het eerste tekenfilter 'map_dash' worden alle streepjes vervangen door onderstrepingstekens terwijl met de tweede streepjes 'remove_whitespace' alle spaties worden verwijderd.

  {
     "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
        }
     ]
  }

Zie ook