Büyük/küçük harfe duyarlı olmayan filtreleme, model oluşturma ve sıralama için metin normalleştirme
Önemli
Bu özellik, Ek Kullanım Koşulları altında genel önizleme aşamasındadır. Önizleme REST API'si bu özelliği destekler.
Azure AI Search'te normalleştirici, "filtrelenebilir", "modellenebilir" veya "sıralanabilir" olarak işaretlenmiş alanlar üzerinde anahtar sözcük eşleştirme için metinleri önceden işleyen bir bileşendir. Metin çözümleyicileriyle eşleştirilmiş tam metin "aranabilir" alanların aksine, filtre modelli sıralama işlemleri için oluşturulan içerik analiz veya belirteç oluşturma işlemine tabi tutulmaz. Büyük/küçük harf ve karakter farklılıkları ortaya çıktığında metin analizinin atlanması beklenmeyen sonuçlara neden olabilir; bu nedenle içeriğinizdeki varyasyonları homojen hale getirmek için bir normalleştiriciye ihtiyacınız vardır.
Normalleştirici uygulayarak sonuçları geliştiren basit metin dönüştürmeleri elde edebilirsiniz:
- Tutarlı büyük/küçük harf (tümü küçük veya büyük harf gibi)
- ö veya ê gibi aksanları ve aksanları ASCII eşdeğer karakterleri "o" ve "e" olarak normalleştirin
- ve boşluk gibi
-
karakterleri kullanıcı tarafından belirtilen bir karakterle eşleme
Normalleştiricilerin avantajları
Arama dizininden belge aramak ve almak için sorgu girişinin belgenin içeriğiyle eşleşmesi gerekir. Eşleştirme, "arama" çağrısı yaptığınızda olduğu gibi belirteçli içerik üzerinden veya istek bir filtre, model veya orderby işlemiyse belirteçsiz içerik üzerinden yapılır.
Belirteçsiz içerik de analiz edilmediğinden, içerikteki küçük farklılıklar birbirinden farklı değerler olarak değerlendirilir. Aşağıdaki örnekleri değerlendirin:
$filter=City eq 'Las Vegas'
yalnızca tam metni"Las Vegas"
içeren belgeleri döndürür ve kullanım örneği büyük/küçük harfe bakılmaksızın tüm belgeleri gerektirdiğinde yetersiz olan ve"las vegas"
ile"LAS VEGAS"
belgeleri hariç tutar.search=*&facet=City,count:5
,"LAS VEGAS"
ve"las vegas"
değerlerini aynı şehir olmasına rağmen farklı değerler olarak döndürür"Las Vegas"
.search=usa&$orderby=City
, söz konusu durumdan bağımsız olarak aynı şehirleri birlikte sıralamak olsa bile, şehirlerini sözcük düzeninde"Las Vegas"
"Seattle"
"las vegas"
döndürür.
Dizin oluşturma ve sorgu yürütme sırasında çağrılan normalleştirici, filtre, model ve sıralama senaryoları için metindeki küçük farkları düzelten hafif dönüştürmeler ekler. Önceki örneklerde "Las Vegas"
, daha tekdüzen sonuçlar elde etmek için değişkenleri seçtiğiniz normalleştiriciye göre (örneğin, tüm metinler küçük harfle gösterilir) işlenir.
Normalleştirici belirtme
Normalleştiriciler bir dizin tanımında, alan başına, "filtrelenebilir", "sıralanabilir" veya "modellenebilir" özelliklerden en az biri true olarak ayarlanmış metin alanlarına (Edm.String
ve Collection(Edm.String)
) göre belirtilir. Normalleştiricinin ayarlanması isteğe bağlıdır ve varsayılan olarak null'tır. Özel bir normalleştirici yapılandırmadan önce önceden tanımlanmış normalleştiricileri değerlendirmenizi öneririz.
Normalleştiriciler yalnızca dizine yeni bir alan eklediğinizde belirtilebilir, bu nedenle mümkünse normalleştirme gereksinimlerini önceden değerlendirmeyi deneyin ve dizinleri bırakarak yeniden oluştururken geliştirmenin ilk aşamalarında normalleştiriciler atayın.
Dizinde alan tanımı oluştururken , "normalizer" özelliğini şu değerlerden birine ayarlayın: "küçük harf" gibi önceden tanımlanmış bir normalleştirici veya özel bir normalleştirici (aynı dizin şemasında tanımlanır).
"fields": [ { "name": "Description", "type": "Edm.String", "retrievable": true, "searchable": true, "filterable": true, "analyzer": "en.microsoft", "normalizer": "lowercase" ... } ]
Özel normalleştiriciler önce dizinin "normalleştiriciler" bölümünde tanımlanır ve ardından önceki adımda gösterildiği gibi alan tanımına atanır. Daha fazla bilgi için bkz . Dizin Oluşturma ve ayrıca Özel normalleştiriciler ekleme.
"fields": [ { "name": "Description", "type": "Edm.String", "retrievable": true, "searchable": true, "analyzer": null, "normalizer": "my_custom_normalizer" },
Not
Varolan bir alanın normalleştiricisini değiştirmek için dizini tamamen yeniden oluşturun (tek tek alanları yeniden oluşturamazsınız).
Dizinleri yeniden oluşturmanın maliyetli olduğu üretim dizinleri için iyi bir geçici çözüm, eskisiyle aynı ancak yeni normalleştirici ile yeni bir alan oluşturmak ve eskisinin yerine kullanmaktır. Yeni alanı eklemek için Dizini Güncelleştir'i ve doldurmak için mergeOrUpload komutunu kullanın. Daha sonra, planlanan dizin bakımı kapsamında, eski alanları kaldırmak için dizini temizleyebilirsiniz.
Önceden tanımlanmış ve özel normalleştiriciler
Azure AI Search, yaygın kullanım örnekleri için yerleşik normalleştiriciler ve gerektiğinde özelleştirme özelliği sağlar.
Kategori | Açıklama |
---|---|
Önceden tanımlanmış normalleştiriciler | Kullanıma sunulmadan sağlanır ve herhangi bir yapılandırma olmadan kullanılabilir. |
Özel normalleştiriciler 1 | Gelişmiş senaryolar için. Karakter ve belirteç filtrelerinden oluşan mevcut öğelerin bir bileşiminin kullanıcı tanımlı yapılandırılmasını gerektirir. |
(1) Normalleştiriciler her zaman tek bir belirteç ürettiğinden özel normalleştiriciler belirteç oluşturucuları belirtmez.
Normalleştiriciler başvurusu
Önceden tanımlanmış normalleştiriciler
Ad | Açıklama ve Seçenekler |
---|---|
standart | Metni küçük harfle ve ardından asciifolding ile küçük harfle ekler. |
Küçük | Karakterleri küçük harfe dönüştürür. |
büyük harf | Karakterleri büyük harfe dönüştürür. |
asciifolding | Temel Latin Unicode bloğunda olmayan karakterleri varsa ASCII eşdeğerine dönüştürür. Örneğin, olarak değiştiriliyor à a . |
elision | Belirteçlerin başından elision kaldırır. |
Desteklenen karakter filtreleri
Normalleştiriciler, özel çözümleyici karakter filtrelerinde karşılıklarıyla aynı olan iki karakter filtresini destekler:
Desteklenen belirteç filtreleri
Aşağıdaki liste normalleştiriciler için desteklenen belirteç filtrelerini gösterir ve özel çözümleyicilerde kullanılan genel belirteç filtrelerinin bir alt kümesidir.
- arabic_normalization
- asciifolding
- cjk_width
- elision
- german_normalization
- hindi_normalization
- indic_normalization
- persian_normalization
- scandinavian_normalization
- scandinavian_folding
- sorani_normalization
- Küçük
- büyük harf
Özel normalleştiriciler ekleme
Özel normalleştiriciler dizin şeması içinde tanımlanır. Tanım bir ad, tür, bir veya daha fazla karakter filtresi ve belirteç filtresi içerir. Karakter filtreleri ve belirteç filtreleri, özel bir normalleştiricinin yapı taşlarıdır ve metnin işlenmesinden sorumludur. Bu filtreler soldan sağa uygulanır.
token_filter_name_1
, belirteç filtresinin adıdır ve char_filter_name_2
char_filter_name_1
karakter filtrelerinin adlarıdır (geçerli değerler için aşağıdaki desteklenen belirteç filtreleri ve desteklenen karakter filtreleritablolarına bakın).
"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",
...
}
]
Özel normalleştiriciler dizin oluşturma sırasında veya daha sonra mevcut bir dizin güncelleştirilerek eklenebilir. Var olan bir dizine özel normalleştirici eklemek için Güncelleştirme Dizini'nde "allowIndexDowntime" bayrağının belirtilmesi gerekir ve dizin birkaç saniye boyunca kullanılamaz duruma gelir.
Özel normalleştirici örneği
Aşağıdaki örnekte, karşılık gelen karakter filtreleri ve belirteç filtreleri ile özel bir normalleştirici tanımı gösterilmektedir. Karakter filtreleri ve belirteç filtreleri için özel seçenekler, adlandırılmış yapılar olarak ayrı ayrı belirtilir ve aşağıda gösterildiği gibi normalleştirici tanımında başvurulur.
Dizin tanımının "normalleştiriciler" bölümünde "my_custom_normalizer" adlı özel bir normalleştirici tanımlanır.
Normalleştirici iki karakter filtresi ve üç belirteç filtresinden oluşur: elision, küçük harf ve özelleştirilmiş asciifolding filtresi "my_asciifolding".
İlk karakter filtresi "map_dash" tüm tireleri alt çizgilerle değiştirirken, ikincisi "remove_whitespace" tüm boşlukları kaldırır.
{
"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
}
]
}