Analysverktyg för textbearbetning i Azure AI Search

En analysverktyg är en komponent i sökmotorn i fulltext som ansvarar för bearbetning av strängar under indexering och frågekörning. Textbearbetning (kallas även lexikal analys) är transformerande och ändrar en sträng genom åtgärder som dessa:

  • Ta bort icke-väsentliga ord (stoppord) och skiljetecken
  • Dela upp fraser och avstavade ord i komponentdelar
  • Gemener eller versaler
  • Minska ord till primitiva rotformer för lagringseffektivitet och så att matchningar kan hittas oavsett tempus

Analysen gäller för Edm.String fält som är markerade som "sökbara", vilket indikerar fulltextsökning.

För fält i den här konfigurationen sker analys under indexering när token skapas och sedan igen under frågekörningen när frågor parsas och motorn söker efter matchande token. Det är mer troligt att en matchning inträffar när samma analysverktyg används för både indexering och frågor, men du kan ange analysatorn för varje arbetsbelastning oberoende av dina behov.

Frågetyper som inte är fulltextsökning, till exempel filter eller fuzzy-sökning, går inte igenom analysfasen på frågesidan. I stället skickar parsern dessa strängar direkt till sökmotorn med hjälp av det mönster som du anger som grund för matchningen. Dessa frågeformulär kräver vanligtvis helsträngstoken för att mönstermatchning ska fungera. För att säkerställa att hela termtoken bevaras under indexeringen kan du behöva anpassade analysverktyg. Mer information om när och varför frågetermer analyseras finns i Fulltextsökning i Azure AI Search.

Om du vill ha mer bakgrund om lexikal analys kan du lyssna på följande videoklipp för en kort förklaring.

Standardanalys

I Azure AI Search anropas en analysator automatiskt på alla strängfält som markerats som sökbara.

Som standard använder Azure AI Search Apache Lucene Standard-analysatorn (standard lucene), som delar upp text i element som följer reglerna för "Unicode-textsegmentering" . Standardanalysatorn konverterar alla tecken till deras gemener. Både indexerade dokument och söktermer går igenom analysen under indexering och frågebearbetning.

Du kan åsidosätta standardinställningen fält för fält. Alternativa analysverktyg kan vara ett språkanalysverktyg för språkbearbetning, en anpassad analysator eller en inbyggd analysator från listan över tillgängliga analysverktyg.

Typer av analysverktyg

I följande lista beskrivs vilka analysverktyg som är tillgängliga i Azure AI Search.

Kategori beskrivning
Standard Lucene analyzer Standard. Ingen specifikation eller konfiguration krävs. Den här general-purpose analyzer fungerar bra för många språk och scenarier.
Inbyggda analysverktyg Förbrukas som den är och refereras med namn. Det finns två typer: språk och språkagnostisk.

Specialiserade (språkagnostiska) analysverktyg används när textindata kräver specialiserad bearbetning eller minimal bearbetning. Exempel på analysverktyg i den här kategorin är Asciifolding, Keyword, Pattern, Simple, Stop, Whitespace.

Språkanalysverktyg används när du behöver omfattande språkstöd för enskilda språk. Azure AI Search har stöd för 35 lucene-språkanalyserare och 50 analysverktyg för bearbetning av naturligt språk från Microsoft.
Anpassade analysverktyg Refererar till en användardefinierad konfiguration av en kombination av befintliga element, som består av en tokenizer (krävs) och valfria filter (tecken eller token).

Några inbyggda analysverktyg, till exempel Mönster eller Stopp, stöder en begränsad uppsättning konfigurationsalternativ. Om du vill ange de här alternativen skapar du en anpassad analysator som består av den inbyggda analysatorn och ett av de alternativ som beskrivs i inbyggda analysverktyg. Precis som med alla anpassade konfigurationer anger du den nya konfigurationen med ett namn, till exempel myPatternAnalyzer för att skilja den från Lucene Pattern-analysatorn.

Ange analysverktyg

Det är valfritt att ange en analysator. Som en allmän regel kan du prova att använda standardstandarden Lucene analyzer först för att se hur den fungerar. Om frågor inte returnerar det förväntade resultatet är det ofta rätt lösning att växla till en annan analysator.

  1. Om du använder en anpassad analysator lägger du till den i sökindexet under avsnittet "analyzer". Mer information finns i Skapa index och även Lägg till anpassade analysverktyg.

  2. När du definierar ett fält anger du egenskapen "analyzer" till något av följande: en inbyggd analysator , till exempel nyckelord, ett språkanalysverktyg som en.microsoft, eller en anpassad analysator (definierad i samma indexschema).

      "fields": [
     {
       "name": "Description",
       "type": "Edm.String",
       "retrievable": true,
       "searchable": true,
       "analyzer": "en.microsoft",
       "indexAnalyzer": null,
       "searchAnalyzer": null
     },
    
  3. Om du använder en språkanalys måste du använda egenskapen "analyzer" för att ange den. Egenskaperna "searchAnalyzer" och "indexAnalyzer" gäller inte för språkanalysverktyg.

  4. Du kan också ange "indexAnalyzer" och "searchAnalyzer" för att variera analysatorn för varje arbetsbelastning. Dessa egenskaper fungerar tillsammans som en ersättning för egenskapen "analyzer", som måste vara null. Du kan använda olika analysverktyg för indexering och frågor om en av dessa aktiviteter kräver en specifik transformering som inte behövs av den andra.

      "fields": [
     {
       "name": "ProductGroup",
       "type": "Edm.String",
       "retrievable": true,
       "searchable": true,
       "analyzer": null,
       "indexAnalyzer": "keyword",
       "searchAnalyzer": "standard"
     },
    

När du ska lägga till analysverktyg

Den bästa tiden att lägga till och tilldela analysverktyg är under aktiv utveckling, när det är rutin att släppa och återskapa index.

Eftersom analysverktyg används för att tokenisera termer bör du tilldela en analysator när fältet skapas. Faktum är att det inte är tillåtet att tilldela en analysator eller indexAnalyzer till ett fält som redan har skapats fysiskt (även om du kan ändra egenskapen searchAnalyzer när som helst utan att indexet påverkas).

Om du vill ändra analysatorn för ett befintligt fält måste du släppa och återskapa hela indexet (du kan inte återskapa enskilda fält). För index i produktion kan du skjuta upp en ombyggnad genom att skapa ett nytt fält med den nya analystilldelningen och börja använda den i stället för den gamla. Använd Uppdateringsindex för att införliva det nya fältet och mergeOrUpload för att fylla i det. Senare, som en del av den planerade indexservicen, kan du rensa indexet för att ta bort föråldrade fält.

Om du vill lägga till ett nytt fält i ett befintligt index anropar du Uppdatera index för att lägga till fältet och mergeOrUpload för att fylla i det.

Om du vill lägga till en anpassad analysator i ett befintligt index skickar du flaggan "allowIndexDowntime" i Uppdateringsindex om du vill undvika det här felet:

"Index update not allowed because it would cause downtime. In order to add new analyzers, tokenizers, token filters, or character filters to an existing index, set the 'allowIndexDowntime' query parameter to 'true' in the index update request. Note that this operation will put your index offline for at least a few seconds, causing your indexing and query requests to fail. Performance and write availability of the index can be impaired for several minutes after the index is updated, or longer for very large indexes."

Rekommendationer för att arbeta med analysverktyg

Det här avsnittet innehåller råd om hur du arbetar med analysverktyg.

En analysator för läs- och skrivåtgärder om du inte har specifika krav

Med Azure AI Search kan du ange olika analysverktyg för indexering och söka igenom fältegenskaperna "indexAnalyzer" och "searchAnalyzer". Om den är ospecificerad används analysverktygsuppsättningen med egenskapen analyzer för både indexering och sökning. Om analysatorn är ospecificerad används standardanalysatorn Standard Lucene.

En allmän regel är att använda samma analysator för både indexering och frågekörning, såvida inte specifika krav kräver något annat. Var noga med att testa noggrant. När textbearbetningen skiljer sig åt vid sök- och indexeringstiden riskerar du att matchas fel mellan frågetermer och indexerade termer när analysverktygskonfigurationerna för sökning och indexering inte justeras.

Testa under aktiv utveckling

Om du ska åsidosätta standardanalysatorn måste du återskapa indexet. Om möjligt kan du bestämma vilka analysverktyg som ska användas under aktiv utveckling innan du rullar ett index till produktion.

Granska tokeniserade termer

Om en sökning inte returnerar förväntade resultat är det mest sannolika scenariot tokenavvikelser mellan termindata i frågan och tokeniserade termer i indexet. Om token inte är samma kan matchningar inte materialiseras. För att inspektera tokenizer-utdata rekommenderar vi att du använder analys-API:et som ett undersökningsverktyg. Svaret består av token som genereras av en specifik analysator.

REST-exempel

Exemplen nedan visar analysdefinitioner för några viktiga scenarier.

Exempel på anpassad analys

Det här exemplet illustrerar en analysdefinition med anpassade alternativ. Anpassade alternativ för teckenfilter, tokenizers och tokenfilter anges separat som namngivna konstruktioner och refereras sedan i analysdefinitionen. Fördefinierade element används som är och refereras med namn.

Gå igenom det här exemplet:

  • Analysverktyg är en egenskap för fältklassen för ett sökbart fält.

  • En anpassad analys är en del av en indexdefinition. Det kan vara lätt anpassat (till exempel att anpassa ett enda alternativ i ett filter) eller anpassas på flera platser.

  • I det här fallet är den anpassade analysatorn "my_analyzer", som i sin tur använder en anpassad standardtokeniserare "my_standard_tokenizer" och två tokenfilter: gemener och anpassat asciifoldingfilter "my_asciifolding".

  • Den definierar även 2 anpassade teckenfilter "map_dash" och "remove_whitespace". Den första ersätter alla bindestreck med understreck medan den andra tar bort alla blanksteg. Blanksteg måste vara UTF-8-kodade i mappningsreglerna. Teckenfiltren tillämpas före tokenisering och påverkar de resulterande token (standardtokeniseraren bryter på streck och blanksteg men inte på understreck).

  {
     "name":"myindex",
     "fields":[
        {
           "name":"id",
           "type":"Edm.String",
           "key":true,
           "searchable":false
        },
        {
           "name":"text",
           "type":"Edm.String",
           "searchable":true,
           "analyzer":"my_analyzer"
        }
     ],
     "analyzers":[
        {
           "name":"my_analyzer",
           "@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer",
           "charFilters":[
              "map_dash",
              "remove_whitespace"
           ],
           "tokenizer":"my_standard_tokenizer",
           "tokenFilters":[
              "my_asciifolding",
              "lowercase"
           ]
        }
     ],
     "charFilters":[
        {
           "name":"map_dash",
           "@odata.type":"#Microsoft.Azure.Search.MappingCharFilter",
           "mappings":["-=>_"]
        },
        {
           "name":"remove_whitespace",
           "@odata.type":"#Microsoft.Azure.Search.MappingCharFilter",
           "mappings":["\\u0020=>"]
        }
     ],
     "tokenizers":[
        {
           "name":"my_standard_tokenizer",
           "@odata.type":"#Microsoft.Azure.Search.StandardTokenizerV2",
           "maxTokenLength":20
        }
     ],
     "tokenFilters":[
        {
           "name":"my_asciifolding",
           "@odata.type":"#Microsoft.Azure.Search.AsciiFoldingTokenFilter",
           "preserveOriginal":true
        }
     ]
  }

Exempel på analysverktygstilldelning per fält

Standardanalysatorn är standardvärdet. Anta att du vill ersätta standardvärdet med en annan fördefinierad analysator, till exempel mönsteranalysatorn. Om du inte anger anpassade alternativ behöver du bara ange det med namn i fältdefinitionen.

Elementet "analyzer" åsidosätter standardanalyseraren fält för fält. Det finns ingen global åsidosättning. I det här exemplet text1 använder mönsteranalysatorn och text2, som inte anger någon analysator, standardvärdet.

  {
     "name":"myindex",
     "fields":[
        {
           "name":"id",
           "type":"Edm.String",
           "key":true,
           "searchable":false
        },
        {
           "name":"text1",
           "type":"Edm.String",
           "searchable":true,
           "analyzer":"pattern"
        },
        {
           "name":"text2",
           "type":"Edm.String",
           "searchable":true
        }
     ]
  }

Blanda analysverktyg för indexering och sökåtgärder

API:erna innehåller indexattribut för att ange olika analysverktyg för indexering och sökning. Attributen searchAnalyzer och indexAnalyzer måste anges som ett par och ersätta attributet single analyzer.

  {
     "name":"myindex",
     "fields":[
        {
           "name":"id",
           "type":"Edm.String",
           "key":true,
           "searchable":false
        },
        {
           "name":"text",
           "type":"Edm.String",
           "searchable":true,
           "indexAnalyzer":"whitespace",
           "searchAnalyzer":"simple"
        },
     ],
  }

Exempel på språkanalys

Fält som innehåller strängar på olika språk kan använda ett språkanalysverktyg, medan andra fält behåller standardvärdet (eller använder någon annan fördefinierad eller anpassad analysator). Om du använder ett språkanalysverktyg måste det användas för både indexerings- och sökåtgärder. Fält som använder en språkanalys kan inte ha olika analysverktyg för indexering och sökning.

  {
     "name":"myindex",
     "fields":[
        {
           "name":"id",
           "type":"Edm.String",
           "key":true,
           "searchable":false
        },
        {
           "name":"text",
           "type":"Edm.String",
           "searchable":true,
           "indexAnalyzer":"whitespace",
           "searchAnalyzer":"simple"
        },
        {
           "name":"text_fr",
           "type":"Edm.String",
           "searchable":true,
           "analyzer":"fr.lucene"
        }
     ],
  }

C#-exempel

Om du använder .NET SDK-kodexemplen kan du lägga till dessa exempel för att använda eller konfigurera analysverktyg.

Tilldela en språkanalys

Alla analysverktyg som används som de är, utan konfiguration, anges i en fältdefinition. Det finns inget krav på att skapa en post i avsnittet [analysverktyg] i indexet.

Språkanalysverktyg används som de är. Om du vill använda dem anropar du LexicalAnalyzer och anger typen LexicalAnalyzerName som tillhandahåller en textanalys som stöds i Azure AI Search.

Anpassade analysverktyg anges på samma sätt i fältdefinitionen, men för att det ska fungera måste du ange analysatorn i indexdefinitionen enligt beskrivningen i nästa avsnitt.

    public partial class Hotel
    {
       . . . 
        [SearchableField(AnalyzerName = LexicalAnalyzerName.Values.EnLucene)]
        public string Description { get; set; }

        [SearchableField(AnalyzerName = LexicalAnalyzerName.Values.FrLucene)]
        [JsonPropertyName("Description_fr")]
        public string DescriptionFr { get; set; }

        [SearchableField(AnalyzerName = "url-analyze")]
        public string Url { get; set; }
      . . .
    }

Definiera en anpassad analysator

När anpassning eller konfiguration krävs lägger du till en analysverktygskonstruktion i ett index. När du har definierat den kan du lägga till fältdefinitionen som visas i föregående exempel.

Skapa ett CustomAnalyzer-objekt . En anpassad analysator är en användardefinierad kombination av en känd tokeniserare, noll eller fler tokenfilter och noll eller fler teckenfilternamn:

I följande exempel skapas en anpassad analysator med namnet "url-analyze" som använder uax_url_email tokenizer och tokenfiltret Gemener.

private static void CreateIndex(string indexName, SearchIndexClient adminClient)
{
   FieldBuilder fieldBuilder = new FieldBuilder();
   var searchFields = fieldBuilder.Build(typeof(Hotel));

   var analyzer = new CustomAnalyzer("url-analyze", "uax_url_email")
   {
         TokenFilters = { TokenFilterName.Lowercase }
   };

   var definition = new SearchIndex(indexName, searchFields);

   definition.Analyzers.Add(analyzer);

   adminClient.CreateOrUpdateIndex(definition);
}

Nästa steg

En detaljerad beskrivning av frågekörning finns i Fulltextsökning i Azure AI Search. Artikeln använder exempel för att förklara beteenden som kan verka kontraintuitiva på ytan.

Mer information om analysverktyg finns i följande artiklar: