Szöveg normalizálása kis- és nagybetűk megkülönböztetése szűréséhez, szűréséhez és rendezéséhez
Fontos
Ez a funkció nyilvános előzetes verzióban érhető el a kiegészítő használati feltételek alatt. Az előzetes REST API támogatja ezt a funkciót.
Az Azure AI Searchben a normalizáló olyan összetevő, amely előre feldolgozza a kulcsszóegyeztetés szövegét a "szűrhető", "facetable" vagy "rendezhető" címkével jelölt mezőkön. A szövegelemzőkkel párosított teljes szöveges "kereshető" mezőkkel ellentétben a szűrési szempontú rendezési műveletekhez létrehozott tartalom nem végez elemzést vagy tokenizálást. A szövegelemzés kihagyása váratlan eredményeket eredményezhet, ha a burkolat és a karakterkülönbségek megjelennek, ezért van szükség normalizálóra a tartalom variációinak homogenizálásához.
Normalizáló alkalmazásával olyan világos szövegátalakításokat érhet el, amelyek javítják az eredményeket:
- Konzisztens burkolat (például kis- vagy nagybetűk)
- Az ékezetek és a mellékjelek normalizálása, például ö vagy ê asCII-ekvivalens "o" és "e" karakterekre
- Karakterek leképezése egy
-
felhasználó által megadott karakterre
A normalizálók előnyei
A dokumentumok keresési indexből való kereséséhez és lekéréséhez a lekérdezés bemenetének és a dokumentum tartalmának kell megfelelnie. Az egyeztetés vagy jogkivonatos tartalomon keresztül történik, ahogyan a "keresés" meghívásakor, vagy nem jogkivonatos tartalomon keresztül, ha a kérés szűrő, aspektus vagy rendezési művelet.
Mivel a nem jogkivonatos tartalmakat sem elemzi a rendszer, a rendszer a tartalom kis eltéréseit eltérő értékként értékeli ki. Tekintse az alábbi példákat:
$filter=City eq 'Las Vegas'
csak a pontos szöveget"Las Vegas"
tartalmazó dokumentumokat adja vissza, és kizárja azokat a dokumentumokat"LAS VEGAS"
"las vegas"
, amelyek nem megfelelőek, ha a használati esethez az összes dokumentumra szükség van a burkolattól függetlenül.search=*&facet=City,count:5
vissza fog térni"Las Vegas"
,"LAS VEGAS"
és"las vegas"
eltérő értékekként annak ellenére, hogy ugyanaz a város.search=usa&$orderby=City
lexikális sorrendben adja vissza a városokat:"Las Vegas"
,"Seattle"
,"las vegas"
, még akkor is, ha a szándék az, hogy ugyanazon városokat az esettől függetlenül együtt rendezze.
Az indexelés és a lekérdezés végrehajtása során meghívott normalizáló olyan világos átalakításokat ad hozzá, amelyek kisimítják a szöveg kisebb eltéréseit a szűrési, aspektus- és rendezési forgatókönyvek esetében. Az előző példákban a variánsok "Las Vegas"
a kiválasztott normalizáló szerint lesznek feldolgozva (például az összes szöveg kisbetűs) az egységesebb eredmények érdekében.
Normalizer megadása
A normalizálók egy indexdefinícióban mezőnként vannak megadva olyan szövegmezőkön (Edm.String
és Collection(Edm.String)
), amelyek legalább egy "szűrhető", "rendezhető" vagy "facetable" tulajdonsága igaz. A normalizáló beállítása nem kötelező, és alapértelmezés szerint null értékű. Javasoljuk, hogy egyéni konfigurálás előtt értékelje ki az előre definiált normalizálókat.
A normalizálók csak akkor adhatók meg, ha új mezőt ad hozzá az indexhez, ezért ha lehetséges, próbálja meg előre felmérni a normalizálási igényeket, és normalizálókat rendeljen a fejlesztés kezdeti fázisaihoz az indexek elvetésekor és újraértékelésekor.
Amikor meződefiníciót hoz létre az indexben, állítsa a "normalizer" tulajdonságot az alábbi értékek egyikére: egy előre definiált normalizálóra , például "kisbetűre" vagy egyéni normalizálóra (ugyanabban az indexsémában definiálva).
"fields": [ { "name": "Description", "type": "Edm.String", "retrievable": true, "searchable": true, "filterable": true, "analyzer": "en.microsoft", "normalizer": "lowercase" ... } ]
Az egyéni normalizálók először az index "normalizers" szakaszában vannak definiálva, majd hozzá vannak rendelve a meződefinícióhoz az előző lépésben látható módon. További információ: Index létrehozása és egyéni normalizálók hozzáadása.
"fields": [ { "name": "Description", "type": "Edm.String", "retrievable": true, "searchable": true, "analyzer": null, "normalizer": "my_custom_normalizer" },
Feljegyzés
Egy meglévő mező normalizálójának módosításához az indexet teljesen újra kell építeni (nem lehet újraépíteni az egyes mezőket).
Az éles indexek esetében, ahol az indexek újraépítése költséges, jó megoldás, ha létrehoz egy új mezőt, amely megegyezik a régivel, de az új normalizálóval, és a régi helyett használja. 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.
Előre definiált és egyéni normalizálók
Az Azure AI Search beépített normalizálókat biztosít a gyakori használati esetekhez, valamint igény szerint testre szabható funkciókat.
Kategória | Leírás |
---|---|
Előre definiált normalizálók | A házon kívül van megadva, és konfiguráció nélkül is használható. |
Egyéni normalizálók 1 | Speciális forgatókönyvek esetén. A meglévő elemek kombinációjának felhasználó által definiált konfigurációját igényli, amely karakter- és jogkivonatszűrőkből áll. |
(1) Az egyéni normalizálók nem adnak meg jogkivonat-jelölőket, mivel a normalizálók mindig egyetlen tokent hoznak létre.
Normalizers-referencia
Előre definiált normalizálók
Név | Leírás és beállítások |
---|---|
normál | Kisbetűssé alakítja a szöveget, majd az asciifolding parancsot. |
kisbetűs | Kisbetűssé alakítja a karaktereket. |
nagybetűs | A karaktereket nagybetűssé alakítja. |
asciifolding | Az egyszerű latin Unicode-blokkban nem szereplő karaktereket ASCII-ekvivalenssé alakítja át, ha létezik ilyen. Például váltsunk a à következőre a : . |
elision | Eltávolítja az elision-t a jogkivonatok elejéről. |
Támogatott karakterszűrők
A normalizálók két olyan karakterszűrőt támogatnak, amelyek megegyeznek az egyéni elemző karakterszűrőkben lévő megfelelőkkel:
Támogatott jogkivonat-szűrők
Az alábbi listában a normalizálók által támogatott jogkivonatszűrők láthatók, és az egyéni elemzőkben használt teljes jogkivonatszűrők részhalmaza.
- arabic_normalization
- asciifolding
- cjk_width
- elision
- german_normalization
- hindi_normalization
- indic_normalization
- persian_normalization
- scandinavian_normalization
- scandinavian_folding
- sorani_normalization
- kisbetűs
- nagybetűs
Egyéni normalizálók hozzáadása
Az egyéni normalizálók az indexsémán belül vannak definiálva. A definíció tartalmaz egy nevet, egy típust, egy vagy több karakterszűrőt és jogkivonatszűrőt. A karakterszűrők és a jogkivonatszűrők az egyéni normalizáló építőelemei, és felelősek a szöveg feldolgozásáért. Ezek a szűrők balról jobbra vannak alkalmazva.
A token_filter_name_1
jogkivonat-szűrő neve, és char_filter_name_2
char_filter_name_1
a karakterszűrők neve (az érvényes értékekért lásd alább a támogatott jogkivonatszűrőket és a támogatott karakterszűrőkettartalmazó táblázatokat).
"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",
...
}
]
Az egyéni normalizálók hozzáadhatók az index létrehozásakor vagy később egy meglévő frissítésével. Ha egyéni normalizálót ad hozzá egy meglévő indexhez, az "allowIndexDowntime" jelzőt meg kell adni az Update Indexben, és az index néhány másodpercig elérhetetlenné válik.
Egyéni normalizáló példa
Az alábbi példa egy egyéni normalizáló definíciót mutat be a megfelelő karakterszűrőkkel és jogkivonatszűrőkkel. A karakterszűrők és a jogkivonatszűrők egyéni beállításai nevesített szerkezetként vannak megadva, majd a normalizáló definícióban az alább látható módon hivatkoznak rá.
A "my_custom_normalizer" nevű egyéni normalizáló az indexdefiníció "normalizers" szakaszában van definiálva.
A normalizáló két karakterszűrőből és három jogkivonatszűrőből áll: elision, kisbetűs és testre szabott asciifolding filter "my_asciifolding".
Az első karakterszűrő "map_dash" aláhúzásjelekre cseréli az összes kötőjelet, míg a második "remove_whitespace" eltávolítja az összes szóközt.
{
"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
}
]
}