Megosztás a következőn keresztül:


Szövegfeldolgozási elemzők az Azure AI Searchben

Az elemző a teljes szöveges keresőmotor összetevője, amely a sztringek indexelés és lekérdezés végrehajtása során történő feldolgozásáért felelős. A szövegfeldolgozás (más néven lexikális elemzés) átalakító, amely a sztringeket az alábbi műveleteken keresztül módosítja:

  • Nem alapvető szavak (stopwords) és írásjelek eltávolítása
  • Kifejezések és kötőjellel elválasztott szavak felosztása összetevő részekre.
  • Az összes nagybetűs szó kisbetűsre alakítása
  • Csökkentse a szavakat primitív gyökérformákká a tárolási hatékonyság érdekében, hogy a találatok az időtől függetlenül megtalálhatók legyenek.

A lexikális elemző kimenete tokenek sorozata.

A lexikális elemzés a Edm.String "kereshetőként" megjelölt mezőkre vonatkozik, amely a teljes szöveges keresést jelzi. A konfiguráció mezői esetében az elemzés az indexelés során történik a jogkivonatok létrehozásakor, majd a lekérdezés végrehajtása során, amikor a lekérdezések elemzésre kerülnek, és a motor egyező jogkivonatokat keres. Nagyobb valószínűséggel fordul elő egyezés, ha ugyanazt az elemzőt használja az indexeléshez és a lekérdezésekhez is, de az elemzőt egymástól függetlenül is beállíthatja az egyes számítási feladatokhoz a követelményektől függően.

A nem teljes szöveges kereséssel (például szűrőkkel vagy homályos kereséssel) kapcsolatos lekérdezéstípusok nem haladnak át a lekérdezés oldalán az elemzési fázison. Ehelyett az elemző közvetlenül a keresőmotornak küldi el ezeket a sztringeket az Ön által megadott minta alapján. Ezek a lekérdezési űrlapok általában egész-sztring tokeneket igényelnek a mintakeresés működéséhez. Ahhoz, hogy a kifejezés egységek megmaradjanak az indexelés során, szükség lehet önálló elemzőkre. További információ a lekérdezési kifejezések elemzésének időpontjáról és okáról: Teljes szöveges keresés az Azure AI Searchben.

A lexikális elemzéssel kapcsolatos további háttérért hallgassa meg a következő videoklipet egy rövid magyarázatért.

Alapértelmezett elemző

Az Azure AI Searchben a rendszer automatikusan meghív egy elemzőt a kereshetőként megjelölt összes sztringmezőre.

Az Azure AI Search alapértelmezés szerint az Apache Lucene Standard elemzőt (standard lucene) használja, amely a szöveget a "Unicode Text Szegmentálás" szabályok szerinti elemekre bontja. A standard elemző az összes karaktert kisbetűs formává alakítja. Az indexelt dokumentumok és a keresési kifejezések egyaránt végighaladnak az elemzésen az indexelés és a lekérdezésfeldolgozás során.

Az alapértelmezett értéket mezőnként felülbírálhatja. Alternatív elemzők a következők:

Az elemzők típusai

Az alábbi lista ismerteti, hogy mely elemzők érhetők el az Azure AI Searchben.

Kategória Leírás
Standard Lucene-elemző Alapértelmezett. Nincs szükség specifikációra vagy konfigurációra. Ez az általános célú elemző számos nyelv és forgatókönyv esetében jól működik.
Beépített elemzők Közvetlen fogyasztásra, és névvel hivatkoznak rá. Két típus létezik: nyelvspecifikus és nyelvtől független.

Speciális (nyelvi-agnosztikus) elemzőket akkor használunk, ha a szöveges bemenetek speciális feldolgozást vagy minimális feldolgozást igényelnek. Az ebben a kategóriában szereplő elemzők közé tartoznak például az Asciifolding, a Kulcsszó, a Minta, az Egyszerű, a Stop, a Whitespace.

A nyelvelemzők akkor használatosak, ha az egyes nyelvekhez gazdag nyelvi támogatásra van szüksége. Az Azure AI Search 35 Lucene nyelvelemzőt és 50 Microsoft természetes nyelvi feldolgozás elemzőt támogat.
Egyéni elemzők A meglévő elemek kombinációjának felhasználó által definiált konfigurációjára hivatkozik, amely egy tokenizerből (kötelező) és választható szűrőkből (karakterből vagy jogkivonatból) áll.

Néhány beépített elemző, például a Minta vagy a Leállítás, korlátozott konfigurációs lehetőségeket támogat. A beállítások beállításához hozzon létre egy egyéni elemzőt, amely a beépített elemzőből és a beépített elemzőkben dokumentált alternatív lehetőségek egyikéből áll. Az egyéni konfigurációkhoz hasonlóan adjon nevet az új konfigurációnak, például a myPatternAnalyzernek , hogy megkülönböztesse a Lucene-mintaelemzőtől.

Elemzők megadása

Az elemző beállítása nem kötelező. Általános szabályként először próbálja meg az alapértelmezett standard Lucene-elemzőt használni a teljesítmény megtekintéséhez. Ha a lekérdezések nem adják vissza a várt eredményeket, gyakran egy másik elemzőre való váltás a megfelelő megoldás.

  1. Ha egyéni elemzőt használ, vegye fel a keresési indexbe az "elemző" szakaszban. További információ: Index létrehozása és egyéni elemzők hozzáadása.

  2. Mező definiálásakor állítsa be az "analyzer" tulajdonságot a következők egyikére: egy beépített elemzőre, például a kulcsszóra, vagy egy nyelvi elemzőre, például en.microsoft, vagy egy egyéni elemzőre (az ugyanabban az indexsémában definiált).

      "fields": [
     {
       "name": "Description",
       "type": "Edm.String",
       "retrievable": true,
       "searchable": true,
       "analyzer": "en.microsoft",
       "indexAnalyzer": null,
       "searchAnalyzer": null
     },
    
  3. Ha nyelvelemzőt használ, annak megadásához az "analyzer" tulajdonságot kell használnia. A "searchAnalyzer" és az "indexAnalyzer" tulajdonságok nem vonatkoznak a nyelvelemzőkre.

  4. Másik lehetőségként állítsa be az "indexAnalyzer" és a "searchAnalyzer" értéket, hogy az egyes számítási feladatokhoz eltérő elemzőt állítson be. Ezek a tulajdonságok az "analyzer" tulajdonság helyettesítőjeként működnek együtt, amelynek null értékűnek kell lennie. Az indexeléshez és lekérdezésekhez különböző elemzőket használhat, ha az egyik tevékenységhez nem szükséges egy adott átalakítás.

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

Mikor kell elemzőket hozzáadni?

Az elemzők hozzáadásának és hozzárendelésének legjobb ideje az aktív fejlesztés során, az indexek elvetése és újraépítése rutinszerű.

Mivel az elemzők a kifejezések tokenizálására szolgálnak, a mező létrehozásakor ki kell osztania egy elemzőt. Valójában nem engedélyezett egy elemző vagy indexAnalyzer hozzárendelése olyan mezőhöz, amely már fizikailag lett létrehozva (bár a searchAnalyzer tulajdonságot bármikor módosíthatja, és nincs hatással az indexre).

Egy meglévő mező elemzőjének módosításához le kell dobnia és újra létre kell hoznia a teljes indexet (az egyes mezőket nem lehet újraépíteni). Éles indexek esetén elhalaszthatja az újraépítést úgy, hogy létrehoz egy új mezőt az új elemző-hozzárendeléssel, és elkezdi használni a régi helyett. Az Index frissítése funkcióval beépítheti az új mezőt, és a mergeOrUpload segítségével feltöltheti azt. Később a tervezett indexkarbantartás részeként törölheti az indexet az elavult mezők eltávolításához.

Ha új mezőt szeretne hozzáadni egy meglévő indexhez, hívja meg a Update Index parancsot a mező hozzáadásához, majd a mergeOrUpload parancsot a kitöltéséhez.

Ha egyéni elemzőt szeretne hozzáadni egy meglévő indexhez, adja meg az "allowIndexDowntime" jelzőt az Index frissítése területen, ha el szeretné kerülni ezt a hibát:

"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."

Javaslatok az elemzőkkel való munkához

Ez a szakasz tanácsokat nyújt az elemzőkkel való munkához.

Egy elemző írás-olvasáshoz, kivéve, ha konkrét követelményekkel rendelkezik

Az Azure AI Search lehetővé teszi, hogy különböző elemzőket adjon meg az indexeléshez és a kereséshez az "indexAnalyzer" és a "searchAnalyzer" mező tulajdonságain keresztül. Ha nincs meghatározva, a rendszer az elemző tulajdonsággal rendelkező elemzőt használja az indexeléshez és a kereséshez is. Ha az elemző nincs meghatározva, a rendszer az alapértelmezett Standard Lucene-elemzőt használja.

Általános szabály, hogy ugyanazt az elemzőt használja mind az indexeléshez, mind a lekérdezéshez, kivéve, ha adott követelmények másként rendelkeznek. Győződjön meg róla, hogy alaposan tesztel. Ha a szövegfeldolgozás a keresési és indexelési időpontban eltérő, akkor fennáll a lekérdezési kifejezések és az indexelt kifejezések közötti eltérés kockázata, ha a keresési és indexelési elemző konfigurációi nem igazodnak egymáshoz.

Tesztelés az aktív fejlesztés során

A standard elemző felülbírálása index-újraépítést igényel. Ha lehetséges, döntse el, hogy mely elemzőket használja az aktív fejlesztési szakasz során, mielőtt egy indexet élesben alkalmazna.

Tokenizált kifejezések vizsgálata

Ha a keresés nem adja vissza a várt eredményeket, a legvalószínűbb forgatókönyv a lekérdezés kifejezésbemenetei és az index tokenizált kifejezései közötti eltérés. Ha a tokenek nem azonosak, az egyezések nem jönnek létre. A tokenizer kimenetének vizsgálatához javasoljuk, hogy az Analyze API-t használja vizsgálati eszközként. A válasz egy adott elemző által létrehozott tokenekből áll.

REST-példák

Az alábbi példák néhány kulcsfontosságú forgatókönyv elemződefinícióit mutatják be.

Egyéni elemző példa

Ez a példa egy egyéni beállításokkal rendelkező elemződefiníciót mutat be. A karakterszűrők, tokenizerek és token szűrők egyéni beállításait nevükön megadott konstrukciókként adjuk meg, majd az elemző definíciójában hivatkoznak rájuk. Az előre definiált elemeket változtatás nélkül használják, és név alapján hivatkoznak rájuk.

A példa végigjárása:

  • Az elemzők a kereshető mezők mezőosztályának tulajdonságai.

  • Az egyéni elemző egy indexdefiníció része. Ez lehet könnyedén testre szabva (például egyetlen beállítás testreszabása egy szűrőben) vagy több helyen testre szabva.

  • Ebben az esetben az egyéni elemző a "my_analyzer", amely egy testre szabott szabványos tokenizert, a "my_standard_tokenizer"-t használ, valamint két token szűrőt: egy kisbetűssé alakítót és egy testre szabott asciifolding szűrőt, a "my_asciifolding"-et.

  • Emellett 2 egyéni karakterszűrőt is definiál a "map_dash" és a "remove_whitespace". Az első az összes kötőjelet aláhúzásjelekre cseréli, míg a második az összes szóközt eltávolítja. A leképezési szabályokban a szóközöknek UTF-8 kódolásúnak kell lenniük. A karakterszűrők a tokenizálás előtt kerülnek alkalmazásra, és hatással lesznek az eredményül kapott tokenekre (a standard tokenizáló kötőjeleknél és szóközöknél tör, de aláhúzásjeleknél nem).

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

Mezőnkénti elemző-hozzárendelési példa

A Standard elemző az alapértelmezett. Tegyük fel, hogy egy másik előre definiált elemzőre, például a mintaelemzőre szeretné cserélni az alapértelmezett értéket. Ha nem ad meg egyéni beállításokat, a mező definíciójában csak név szerint kell megadnia.

Az "elemző" elem mezőnként felülbírálja a Standard elemzőt. Nincs globális felülbírálás. Ebben a példában a mintaelemzőt használja, text1 és text2– amely nem ad meg elemzőt – az alapértelmezettet használja.

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

Elemzők keverése indexelési és keresési műveletekhez

Az API-k indexattribútumokat tartalmaznak a különböző elemzők indexeléshez és kereséshez való megadásához. A searchAnalyzer és az indexAnalyzer attribútumokat párként kell megadni, lecserélve az egyetlen elemző attribútumot.

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

Nyelvelemző példa

A különböző nyelveken sztringeket tartalmazó mezők használhatnak nyelvelemzőt, míg más mezők megtartják az alapértelmezett értéket (vagy más előre definiált vagy egyéni elemzőt használnak). Ha nyelvelemzőt használ, az indexeléshez és a keresési műveletekhez egyaránt használható. A nyelvelemzőt használó mezők nem rendelkezhetnek különböző elemzőkkel az indexeléshez és a kereséshez.

  {
     "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#-példák

Ha a .NET SDK-kódmintákat használja, ezeket a példákat hozzáfűzheti az elemzők használatához vagy konfigurálásához.

Nyelvelemző hozzárendelése

Minden olyan elemző, amely konfigurálással nem rendelkezik, egy meződefinícióban van megadva. Nincs szükség bejegyzés létrehozására az index [elemzők] szakaszában.

A nyelvelemzőket változtatás nélkül használják. A használatukhoz hívja meg a LexicalAnalyzert, és adja meg a LexicalAnalyzerName típust, és adjon meg egy, az Azure AI Searchben támogatott szövegelemzőt.

Az egyéni elemzők hasonlóan vannak megadva a meződefinícióban, de ahhoz, hogy ez működjön, meg kell adnia az elemzőt az indexdefinícióban, a következő szakaszban leírtak szerint.

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

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

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

Egyéni elemző definiálása

Ha testreszabásra vagy konfigurálásra van szükség, adjon hozzá egy elemzőszerkezetet egy indexhez. Miután definiálta, hozzáadhatja a meződefiníciót az előző példában bemutatott módon.

Hozzon létre egy CustomAnalyzer-objektumot . Az egyéni elemző egy, a felhasználó által meghatározott kombinációja egy ismert tokenizernek, valamint nulla vagy több token szűrő és nulla vagy több karakterszűrő.

Az alábbi példa egy "url-analyze" nevű egyéni elemzőt hoz létre, amely a uax_url_email tokenizert és a kisbetűs jogkivonat-szűrőt használja.

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

   var analyzer = new CustomAnalyzer("url-analyze", LexicalTokenizerName.UaxUrlEmail)
   {
         TokenFilters = { LexicalTokenFilterName.Lowercase }
   };

   var definition = new SearchIndex(indexName, searchFields);

   definition.Analyzers.Add(analyzer);

   adminClient.CreateOrUpdateIndex(definition);
}

Következő lépések

A lekérdezések végrehajtásának részletes leírása az Azure AI Search teljes szöveges keresésében található. A cikk példákat használ az olyan viselkedések magyarázatára, amelyek a felszínen ellentétesen intuitívnak tűnhetnek.

Az elemzőkkel kapcsolatos további információkért tekintse meg az alábbi cikkeket: