Normalisasi teks untuk pemfilteran, pemfasetan, dan pengurutan tidak peka huruf besar/kecil
Penting
Fitur ini berada di pratinjau publik dalam Ketentuan Penggunaan Tambahan. REST API pratinjau mendukung fitur ini.
Di Azure AI Search, normalizer adalah komponen yang melakukan pra-proses teks untuk pencocokan kata kunci di atas bidang yang ditandai sebagai "dapat difilter", "dapat difaset", atau "dapat diurutkan". Berbeda dengan bidang teks lengkap "dapat dicari" yang dipasangkan dengan penganalisis teks, konten yang dibuat untuk operasi pengurutan faset filter tidak menjalani analisis atau tokenisasi. Kelalaian analisis teks dapat menghasilkan hasil yang tidak terduga ketika casing dan perbedaan karakter muncul, itulah sebabnya Anda memerlukan normalizer untuk melakukan homogenisasi variasi dalam konten Anda.
Dengan menerapkan normalizer, Anda dapat mencapai transformasi teks ringan yang meningkatkan hasil:
- Casing yang konsisten (seperti semua huruf kecil atau huruf besar)
- Menormalkan aksen dan diakritik seperti ö atau ê ke karakter setara ASCII "o" dan "e"
- Memetakan karakter seperti
-
dan spasi kosong ke dalam karakter yang ditentukan pengguna
Mencari dan mengambil dokumen dari indeks pencarian memerlukan pencocokan input kueri dengan konten dokumen. Pencocokan adalah konten yang ditokenisasi, seperti halnya ketika Anda memanggil "pencarian", atau melalui konten yang tidak ditokenisasi jika permintaannya adalah filter, faset, atau operasi orderby.
Karena konten yang tidak ditokenisasi juga tidak dianalisis, perbedaan kecil dalam konten dievaluasi sebagai nilai yang berbeda. Perhatikan contoh berikut:
$filter=City eq 'Las Vegas'
hanya akan mengembalikan dokumen yang berisi teks"Las Vegas"
yang tepat dan mengecualikan dokumen dengan"LAS VEGAS"
dan"las vegas"
, yang tidak memadai ketika kasus penggunaan memerlukan semua dokumen terlepas dari casing.search=*&facet=City,count:5
akan mengembalikan"Las Vegas"
,"LAS VEGAS"
dan"las vegas"
sebagai nilai yang berbeda meskipun merupakan kota yang sama.search=usa&$orderby=City
akan mengembalikan kota dalam urutan leksikografis:"Las Vegas"
, ,"Seattle"
,"las vegas"
bahkan jika niatnya adalah untuk memesan kota yang sama bersama-sama terlepas dari kasus ini.
Normalizer, yang dipanggil selama pengindeksan dan eksekusi kueri, menambahkan transformasi cahaya yang memuluskan perbedaan kecil dalam teks untuk skenario filter, faset, dan pengurutan. Dalam contoh sebelumnya, varian akan diproses "Las Vegas"
sesuai dengan normalizer yang Anda pilih (misalnya, semua teks huruf kecil) untuk hasil yang lebih seragam.
Normalizer ditentukan dalam definisi indeks, berdasarkan per bidang, pada bidang teks (Edm.String
dan Collection(Edm.String)
) yang memiliki setidaknya salah satu properti "dapat difilter", "dapat diurutkan", atau "dapat difaset" diatur ke true. Mengatur normalizer bersifat opsional dan null secara default. Sebaiknya evaluasi normalizer yang telah ditentukan sebelumnya sebelum mengonfigurasi yang kustom.
Normalizer hanya dapat ditentukan ketika Anda menambahkan bidang baru ke indeks, jadi jika memungkinkan, cobalah untuk menilai kebutuhan normalisasi di muka dan menetapkan normalizer pada tahap awal pengembangan saat menghilangkan dan membuat ulang indeks adalah rutin.
Saat membuat definisi bidang dalam indeks, atur properti "normalizer" ke salah satu nilai berikut: normalizer yang telah ditentukan sebelumnya seperti "huruf kecil", atau normalizer kustom (ditentukan dalam skema indeks yang sama).
"fields": [ { "name": "Description", "type": "Edm.String", "retrievable": true, "searchable": true, "filterable": true, "analyzer": "en.microsoft", "normalizer": "lowercase" ... } ]
Normalizer kustom didefinisikan di bagian "normalizer" dari indeks terlebih dahulu, lalu ditetapkan ke definisi bidang seperti yang ditunjukkan pada langkah sebelumnya. Untuk informasi selengkapnya, lihat Membuat Indeks dan juga Menambahkan normalizer kustom.
"fields": [ { "name": "Description", "type": "Edm.String", "retrievable": true, "searchable": true, "analyzer": null, "normalizer": "my_custom_normalizer" },
Catatan
Untuk mengubah normalizer bidang yang ada, bangun ulang indeks sepenuhnya (Anda tidak dapat membangun ulang bidang individual).
Solusi yang baik untuk indeks produksi, dengan membuat ulang indeks mahal, adalah membuat bidang baru yang identik dengan yang lama tetapi dengan normalizer baru, dan menggunakannya sebagai pengganti yang lama. Gunakan Update Index untuk menggabungkan bidang baru dan mergeOrUpload untuk mengisinya. Kemudian, sebagai bagian dari layanan indeks yang direncanakan, Anda dapat membersihkan indeks untuk menghapus bidang usang.
Azure AI Search menyediakan normalizer bawaan untuk kasus penggunaan umum bersama dengan kemampuan untuk menyesuaikan sesuai kebutuhan.
Kategori | Deskripsi |
---|---|
Normalizer yang telah ditentukan | Disediakan siap pakai dan dapat digunakan tanpa konfigurasi apa pun. |
Normalizer kustom 1 | Untuk skenario tingkat lanjut. Memerlukan konfigurasi yang ditentukan pengguna dari kombinasi elemen yang ada, yang terdiri dari filter karakter dan token. |
(1) Normalizer kustom tidak menentukan tokenizer karena normalizer selalu menghasilkan satu token.
Nama | Deskripsi dan Opsi |
---|---|
standar | Teks huruf kecil diikuti dengan asciifolding. |
huruf kecil | Mengubah karakter menjadi huruf kecil. |
huruf besar | Mengubah karakter menjadi huruf besar. |
asciifolding | Mengubah karakter yang tidak ada di blok Unicode Latin Dasar ke setara ASCII mereka, jika ada. Misalnya, mengubah à ke a . |
elision | Menghapus elision dari awal token. |
Normalizer mendukung dua filter karakter yang identik dengan rekan-rekan mereka dalam filter karakter penganalisis kustom:
Daftar di bawah ini menunjukkan filter token yang didukung untuk normalizer dan merupakan subset dari filter token keseluruhan yang digunakan dalam penganalisis kustom.
- arabic_normalization
- asciifolding
- cjk_width
- elision
- german_normalization
- hindi_normalization
- indic_normalization
- persian_normalization
- scandinavian_normalization
- scandinavian_folding
- sorani_normalization
- lowercase
- huruf besar
Normalizer kustom ditentukan dalam skema indeks. Definisi mencakup nama, jenis, satu atau beberapa filter karakter dan filter token. Filter karakter dan filter token adalah blok penyusun untuk normalizer kustom dan bertanggung jawab atas pemrosesan teks. Filter ini diterapkan dari kiri ke kanan.
token_filter_name_1
adalah nama filter token, dan char_filter_name_1
merupakan char_filter_name_2
nama filter karakter (lihat filter token yang didukung dan tabel filterkarakter yang didukung di bawah ini untuk nilai yang valid).
"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",
...
}
]
Normalizer kustom dapat ditambahkan selama pembuatan indeks atau kemudian dengan memperbarui yang sudah ada. Menambahkan normalizer kustom ke indeks yang ada memerlukan bendera "allowIndexDowntime" ditentukan dalam Indeks Pembaruan dan akan menyebabkan indeks tidak tersedia selama beberapa detik.
Contoh di bawah ini mengilustrasikan definisi normalizer kustom dengan filter karakter dan filter token yang sesuai. Opsi kustom untuk filter karakter dan filter token ditentukan secara terpisah sebagai konstruksi bernama, lalu direferensikan dalam definisi normalizer seperti yang diilustrasikan di bawah ini.
Normalizer kustom bernama "my_custom_normalizer" didefinisikan di bagian "normalizer" dari definisi indeks.
Normalizer terdiri dari dua filter karakter dan tiga filter token: elisi, huruf kecil, dan filter asciifolding yang disesuaikan "my_asciifolding".
Filter karakter pertama "map_dash" menggantikan semua tanda hubung dengan garis bawah sementara yang kedua "remove_whitespace" menghapus semua spasi.
{
"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
}
]
}