Plugin penganalisis IK (analysis-ik) adalah ekstensi tokenisasi teks bahasa Tionghoa untuk Alibaba Cloud Elasticsearch (ES) yang dilengkapi beberapa jenis kamus bawaan. Anda dapat menyesuaikan atau memperluas kamus untuk meningkatkan akurasi tokenisasi serta memuat file kamus secara dinamis dari Object Storage Service (OSS) guna memudahkan manajemen jarak jauh.
Informasi latar belakang
Plugin penganalisis IK terdiri dari tiga komponen: tokenizer, file kamus, dan mekanisme pembaruan.
Versi plugin penganalisis IK harus sesuai dengan versi kluster Elasticsearch. Misalnya, jika kluster Anda menjalankan versi 8.17, plugin penganalisis IK juga harus versi 8.17.
Tokenizer: Memisahkan teks bahasa Tionghoa menjadi istilah bermakna (token) dan menentukan granularitas tokenisasi.
File kamus: Menyediakan dasar kosakata. Tokenizer mengandalkan file-file ini untuk segmentasi dan mendukung penyesuaian serta perluasan.
Metode pembaruan kamus: Mendukung pembaruan dingin maupun panas sehingga Anda dapat menyesuaikan kamus secara fleksibel sesuai kebutuhan bisnis.
Aturan tokenisasi
Penganalisis IK mendukung dua aturan tokenisasi:
ik_max_word: Memisahkan teks dengan granularitas terkecil, ideal untuk kueri berbasis istilah.
ik_smart: Memisahkan teks dengan granularitas lebih kasar, ideal untuk kueri berbasis frasa.
Jenis kamus
Penganalisis IK mendukung jenis kamus berikut:
Jenis kamus | Deskripsi | Persyaratan file | Metode pembaruan yang didukung |
Kamus utama | Kamus utama bawaan adalah Saat Anda menentukan kamus utama untuk indeks ES, kluster mencocokkan data masuk terhadap kamus ini selama pengindeksan. Istilah yang cocok menjadi dapat dicari melalui kata kunci yang sesuai. | Satu kata per baris, disimpan sebagai file | |
Kamus kata berhenti | Kamus kata berhenti bawaan adalah Saat Anda menentukan kamus kata berhenti untuk indeks ES, kluster menyaring istilah yang cocok selama pengindeksan. Istilah yang difilter tidak muncul dalam indeks terbalik. | ||
Kamus preposisi | Kamus preposisi bawaan adalah | Tidak berlaku | |
Kamus kuantifier | Kamus kuantifier bawaan adalah | ||
suffix.dic | Menyimpan istilah sufiks untuk membantu tokenizer memisahkan kata yang memiliki sufiks. | Tidak berlaku | Pembaruan tidak didukung |
surname.dic | Menyimpan nama keluarga Tionghoa umum untuk membantu tokenizer mengenali nama. |
Metode pembaruan kamus
Perbarui kamus saat kamus bawaan tidak memenuhi kebutuhan Anda. Penganalisis IK mendukung metode berikut.
Metode pembaruan | Deskripsi | Skenario |
Me-restart kluster ES untuk menerapkan perubahan kamus di semua node. Sistem mengirimkan file yang diunggah ke semua node ES dan me-restart-nya. Perubahan berlaku setelah restart selesai. |
| |
Catatan Hanya mendukung pembaruan kamus utama atau kamus kata berhenti. Penting Saat Anda mengonfigurasi pembaruan panas untuk pertama kalinya atau mengubah daftar file kamus (menambah, menghapus, atau mengganti nama file kamus), kluster akan restart. Hanya perubahan konten saja pada file kamus yang sudah ada dengan nama file tidak berubah yang berlaku secara dinamis tanpa restart. Jadwalkan operasi ini selama jam sepi agar tidak mengganggu bisnis Anda. |
|
Prasyarat
Instans berada dalam status Normal. Lihat status instans pada halaman detail.
CatatanTopik ini menggunakan instans Alibaba Cloud ES yang menjalankan versi
7.10.0. Antarmuka Konsol dan fitur dapat berbeda antar versi.(Opsional) Jika Anda berencana memperbarui kamus, selesaikan langkah-langkah berikut terlebih dahulu.
Untuk memperbarui menggunakan Upload OSS File: Pertama buat bucket OSS dan unggah file kamus yang diperlukan.
Untuk memperbarui menggunakan Upload On-premises File: Simpan file kamus yang diperlukan ke mesin lokal Anda terlebih dahulu.
Perbarui kamus IK
Perbarui kamus IK saat kamus bawaan tidak memenuhi kebutuhan Anda. Tinjau metode pembaruan sebelum melanjutkan. Untuk indeks yang telah dikonfigurasi dengan tokenisasi IK, pembaruan kamus hanya berlaku untuk data baru (dokumen yang baru ditambahkan atau diperbarui). Untuk menerapkan perubahan ke semua data yang sudah ada, buat ulang indeks tersebut.
Pembaruan dingin
Untuk melakukan pembaruan dingin:
Pembaruan dingin me-restart kluster. Lakukan ini selama jam sepi.
Buka halaman detail instans.
Login ke Konsol Alibaba Cloud Elasticsearch.
Di panel navigasi kiri, klik Elasticsearch Clusters.
Di bilah menu atas, pilih kelompok sumber daya dan wilayah.
Di daftar instans Elasticsearch, klik ID instans target untuk membuka halaman detailnya.
Buka halaman pembaruan dingin untuk plugin
analysis-ik.Di panel navigasi kiri, pilih .
Di tab Built-in Plug-ins, temukan plugin
analysis-ikdan klik Standard Update di kolom Actions.
Lakukan pembaruan dingin.
Di kotak dialog Configure IK Dictionaries - Standard Update, klik Edit di sebelah kamus target, unggah file kamus yang diperlukan sesuai petunjuk, lalu klik Save.
Anda dapat mengunggah file kamus menggunakan salah satu metode berikut:
Upload On-premises File: Klik ikon
atau seret dan lepas file lokal Anda sesuai petunjuk.Upload OSS File: Masukkan nama bucket dan nama file kamus, lalu klik Add.
Bucket dan instans Alibaba Cloud ES harus berada di wilayah yang sama.
File kamus OSS tidak disinkronkan secara otomatis. Jika file sumber berubah, lakukan pembaruan kamus untuk menerapkan perubahan.
CatatanSetiap jenis kamus hanya mendukung satu file berformat
DIC. File yang diunggah menggantikan kamus asli.Nama file kamus harus diakhiri dengan
.dic. Nama file dapat berisi huruf, angka, dan garis bawah, serta tidak boleh melebihi 30 karakter.Untuk mengembalikan kamus ke file bawaan, unduh file bawaan dan unggah ulang. Dapatkan file kamus bawaan dari tautan berikut:
Pilih pengakuan risiko dan klik OK untuk me-restart instans.
Setelah instans direstart, pembaruan kamus selesai.
(Opsional) Uji apakah pembaruan kamus telah berlaku.
Klik ikon
di pojok kiri atas dan pilih untuk membuka editor kode.Jalankan kode berikut untuk melakukan tokenisasi granularitas kasar pada teks input
Chinese character input method for computers.CatatanDalam praktiknya, ganti nilai
textdengan kata dari kamus Anda.GET _analyze { "analyzer": "ik_smart", "text": "计算机汉字输入方法" }Tanggapan yang diharapkan adalah sebagai berikut.
{ "tokens" : [ { "token" : "computer", "start_offset" : 0, "end_offset" : 3, "type" : "CN_WORD", "position" : 0 }, { "token" : "Chinese character input", "start_offset" : 3, "end_offset" : 7, "type" : "CN_WORD", "position" : 1 }, { "token" : "method", "start_offset" : 7, "end_offset" : 9, "type" : "CN_WORD", "position" : 2 } ] }
Hot update
Untuk melakukan pembaruan panas:
Perubahan konten saja pada file kamus yang sudah ada dengan nama file tidak berubah tidak me-restart kluster. Jika nama file kamus atau jumlahnya berubah, atau jika Anda mengonfigurasi pembaruan panas untuk pertama kalinya, kluster akan restart. Lakukan operasi ini selama jam sepi agar tidak mengganggu bisnis Anda. Setelah restart, kamus berlaku secara otomatis.
Buka halaman detail instans.
Login ke Konsol Alibaba Cloud Elasticsearch.
Di panel navigasi kiri, klik Elasticsearch Clusters.
Di bilah menu atas, pilih kelompok sumber daya dan wilayah.
Di daftar instans Elasticsearch, klik ID instans target untuk membuka halaman detailnya.
Buka halaman pembaruan panas untuk plugin
analysis-ik.Di panel navigasi kiri, pilih .
Di tab Built-in Plug-ins, temukan plugin
analysis-ikdan klik Rolling Update di kolom Actions.
Lakukan pembaruan panas.
Di kotak dialog Configure IK Dictionaries - Rolling Update, klik Edit di sebelah kamus target, unggah file kamus yang diperlukan sesuai petunjuk, lalu klik Save.
Anda dapat mengunggah file kamus menggunakan salah satu metode berikut:
Upload On-premises File: Klik ikon
atau seret dan lepas file lokal Anda sesuai petunjuk.Upload OSS File: Masukkan nama bucket dan nama file kamus, lalu klik Add.
Bucket dan instans Alibaba Cloud ES harus berada di wilayah yang sama.
File kamus OSS tidak disinkronkan secara otomatis. Jika file sumber berubah, lakukan pembaruan kamus untuk menerapkan perubahan.
CatatanAnda dapat mengunggah beberapa file kamus. Nama file harus diakhiri dengan
.dic. Nama file dapat berisi huruf, angka, dan garis bawah, serta tidak boleh melebihi 30 karakter.Untuk memodifikasi file kamus yang telah diunggah, klik ikon
di sebelahnya untuk mengunduh dan mengedit file tersebut. Lalu hapus file asli dan unggah ulang file yang telah diperbarui. Setelah menghapus file asli, klik Save; jika tidak, sistem akan melaporkan bahwa file dengan nama yang sama sudah ada.
Klik OK dan tunggu hingga node ES selesai memuat kamus.
Node ES memuat file kamus secara otomatis. Setiap node memuat pada waktu yang berbeda — tunggu hingga semua node selesai.
(Opsional) Uji apakah pembaruan kamus telah berlaku.
Klik ikon
di pojok kiri atas dan pilih untuk membuka editor kode.Jalankan kode berikut untuk melakukan tokenisasi granularitas kasar pada teks input
Chinese character input method for computers.CatatanDalam praktiknya, ganti nilai
textdengan kata dari kamus Anda.GET _analyze { "analyzer": "ik_smart", "text": "计算机汉字输入方法" }Tanggapan yang diharapkan adalah sebagai berikut.
{ "tokens" : [ { "token" : "computer", "start_offset" : 0, "end_offset" : 3, "type" : "CN_WORD", "position" : 0 }, { "token" : "Chinese character input", "start_offset" : 3, "end_offset" : 7, "type" : "CN_WORD", "position" : 1 }, { "token" : "method", "start_offset" : 7, "end_offset" : 9, "type" : "CN_WORD", "position" : 2 } ] }
Gunakan plugin penganalisis IK
Tokenisasi teks menggunakan tokenizer IK dengan filter Pinyin.
Buka halaman Developer Tools Kibana untuk instans ES Anda.
Klik ikon
di pojok kiri atas dan pilih untuk membuka editor kode.
Buat indeks dan konfigurasikan tokenizer IK serta filter Pinyin.
Jalankan perintah berikut untuk membuat indeks
ik_pinyindenganik_pinyin_analyzerkustom yang menggunakan tokenisasiik_max_worddan filter Pinyin untuk mengonversi istilah bahasa Tionghoa menjadi Pinyin.CatatanFilter Pinyin mengonversi token menjadi Pinyin setelah tokenisasi bahasa Tionghoa selesai.
PUT ik_pinyin { "settings":{ "analysis": { "filter": { "my_pinyin" : { "type" : "pinyin", "keep_separate_first_letter" : false, "keep_full_pinyin" : true, "keep_original" : true, "limit_first_letter_length" : 16, "lowercase" : true, "remove_duplicated_term" : true } }, "analyzer": { "ik_pinyin_analyzer": { "type": "custom", "tokenizer": "ik_max_word", "filter": ["my_pinyin"] } } } }, "mappings":{ "properties":{ "text":{ "type" : "text", "analyzer" : "ik_pinyin_analyzer" } } } }Parameter utama dijelaskan di bawah ini.
Filter Pinyin (parameter
filter)CatatanSemua parameter yang tersedia didokumentasikan dalam Pinyin Analysis for Elasticsearch.
Parameter
Deskripsi
my_pinyin
Nama filter Pinyin kustom Anda.
type
Diatur ke
pinyinuntuk menentukan filter Pinyin.keep_separate_first_letter
Diatur ke
falseuntuk mengecualikan huruf awal individu dari setiap karakter.keep_full_pinyin
Diatur ke
trueuntuk menyertakan bentuk Pinyin lengkap.keep_original
Diatur ke
trueuntuk mempertahankan teks input asli.limit_first_letter_length
Diatur ke
16untuk membatasi urutan huruf awal hingga 16 karakter.lowercase
Diatur ke
trueuntuk menghasilkan Pinyin dalam huruf kecil.remove_duplicated_term
Diatur ke
trueuntuk menghapus istilah duplikat, seperti menghindari“zh,zh”.Alat analisis (
analyzer):Parameter
Deskripsi
ik_pinyin_analyzer
Nama penganalisis kustom Anda.
type
Diatur ke
customuntuk mendefinisikan penganalisis kustom.tokenizer
Diatur ke
ik_max_worduntuk memisahkan teks dengan granularitas terkecil.filter
Diatur ke
my_pinyinuntuk menerapkan filter Pinyinmy_pinyin.Gambar berikut menunjukkan hasil pembuatan yang berhasil.

Verifikasi hasil tokenisasi.
Jalankan kode berikut untuk melakukan tokenisasi pada teks input
This is a test.GET ik_pinyin/_analyze { "text": "这是个测试", "analyzer": "ik_pinyin_analyzer" }Tanggapan yang diharapkan adalah sebagai berikut.
{ "tokens" : [ { "token" : "zhe", "start_offset" : 0, "end_offset" : 2, "type" : "CN_WORD", "position" : 0 }, { "token" : "this is", "start_offset" : 0, "end_offset" : 2, "type" : "CN_WORD", "position" : 0 }, { "token" : "zs", "start_offset" : 0, "end_offset" : 2, "type" : "CN_WORD", "position" : 0 }, { "token" : "shi", "start_offset" : 0, "end_offset" : 2, "type" : "CN_WORD", "position" : 1 }, { "token" : "ge", "start_offset" : 2, "end_offset" : 3, "type" : "CN_CHAR", "position" : 2 }, { "token" : "one", "start_offset" : 2, "end_offset" : 3, "type" : "CN_CHAR", "position" : 2 }, { "token" : "g", "start_offset" : 2, "end_offset" : 3, "type" : "CN_CHAR", "position" : 2 }, { "token" : "ce", "start_offset" : 3, "end_offset" : 5, "type" : "CN_WORD", "position" : 3 }, { "token" : "shi", "start_offset" : 3, "end_offset" : 5, "type" : "CN_WORD", "position" : 4 }, { "token" : "test", "start_offset" : 3, "end_offset" : 5, "type" : "CN_WORD", "position" : 4 }, { "token" : "cs", "start_offset" : 3, "end_offset" : 5, "type" : "CN_WORD", "position" : 4 } ] }
Optimalkan tokenisasi untuk kata campuran alfanumerik
Saat Anda menggunakan tokenizer ik_max_word, string campuran alfanumerik seperti fawjh6bcm mungkin tidak ditokenisasi secara efektif untuk pencarian. Untuk meningkatkan recall, atur parameter enable_single_word ke true. Ini memisahkan kata campuran menjadi token karakter tunggal, memungkinkan pencocokan tingkat karakter.
Contoh berikut membuat penganalisis kustom dengan enable_single_word diaktifkan:
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"ik_single_char_analyzer": {
"type": "custom",
"tokenizer": "my_ik_tokenizer"
}
},
"tokenizer": {
"my_ik_tokenizer": {
"type": "ik_max_word",
"enable_single_word": true
}
}
}
},
"mappings": {
"properties": {
"content": {
"type": "text",
"analyzer": "ik_single_char_analyzer"
}
}
}
}Parameter | Deskripsi |
enable_single_word | Diatur ke |
Parameter ini juga didukung di lingkungan Alibaba Cloud Elasticsearch Serverless.
Gunakan tokenizer ngram untuk pencarian campuran Tionghoa-Inggris
Saat Anda mencari nomor model Inggris yang digabung (seperti jh6bcm) yang dicampur dengan teks Tionghoa, penganalisis IK saja mungkin tidak menghasilkan token yang efektif untuk pencocokan parsial. Dalam skenario ini, gunakan tokenizer ngram untuk melengkapi atau menggantikan penganalisis IK.
Tokenizer ngram memecah teks menjadi urutan karakter berurutan dengan panjang yang dapat dikonfigurasi, memungkinkan pencocokan substring untuk string yang digabung.
Contoh berikut membuat indeks yang menggunakan tokenizer ngram:
PUT my_ngram_index
{
"settings": {
"analysis": {
"tokenizer": {
"my_ngram_tokenizer": {
"type": "ngram",
"min_gram": 2,
"max_gram": 3,
"token_chars": ["letter", "digit"]
}
},
"analyzer": {
"ngram_analyzer": {
"type": "custom",
"tokenizer": "my_ngram_tokenizer"
}
}
}
},
"mappings": {
"properties": {
"model_number": {
"type": "text",
"analyzer": "ngram_analyzer"
}
}
}
}Parameter | Deskripsi |
min_gram | Panjang karakter minimum suatu gram. Default: |
max_gram | Panjang karakter maksimum suatu gram. Default: |
token_chars | Kelas karakter yang disertakan dalam token. Nilai yang valid: |
Untuk informasi lebih lanjut tentang konfigurasi tokenizer ngram, lihat Ngram tokenizer.
FAQ
Kata dalam huruf kapital di file sinonim menyebabkan error. Apa yang harus saya lakukan?
Penganalisis IK peka terhadap huruf besar/kecil saat memproses file sinonim. Jika file sinonim berisi kata dalam huruf kapital (seperti IT), kesalahan parsing dapat terjadi selama pengindeksan.
Anda dapat mengatasi masalah ini dengan salah satu metode berikut:
Konversi semua sinonim ke huruf kecil: Edit file sinonim Anda dan konversi semua entri ke huruf kecil sebelum mengunggah.
Tambahkan filter huruf kecil ke penganalisis: Tambahkan filter
lowercasesebelum filter sinonim dalam konfigurasi penganalisis Anda untuk menormalisasi teks ke huruf kecil sebelum pencocokan sinonim. Contoh:PUT my_index { "settings": { "analysis": { "filter": { "my_synonym_filter": { "type": "synonym", "synonyms_path": "your_synonyms.txt" } }, "analyzer": { "ik_synonym_analyzer": { "type": "custom", "tokenizer": "ik_max_word", "filter": ["lowercase", "my_synonym_filter"] } } } } }PentingFilter
lowercaseharus muncul sebelum filter sinonim dalam rantai filter untuk memastikan teks dikonversi ke huruf kecil sebelum pencocokan sinonim dilakukan.
Referensi
API untuk pembaruan panas kamus IK: UpdateHotIkDicts
API untuk pembaruan dingin kamus IK: UpdateDict