Mengimplementasikan Pencarian Teks Penuh Bahasa Mandarin PostgreSQL dengan pg_jieba di ServBay
Ringkasan
Untuk bahasa seperti Inggris, fitur pencarian teks penuh (full-text search) bawaan PostgreSQL sudah berfungsi efektif berkat analisis leksikal berbasis spasi dan tanda baca. Namun, teks bahasa Mandarin tidak dipisahkan oleh spasi secara alami, sehingga dibutuhkan alat segmentasi kata (Segmentation) khusus untuk memecah barisan karakter Tionghoa menjadi kata-kata bermakna.
pg_jieba
adalah modul ekstensi pihak ketiga untuk database PostgreSQL yang mengintegrasikan pustaka populer Jieba untuk segmentasi kata bahasa Mandarin. Dengan pg_jieba
, Anda dapat melakukan segmentasi kata Mandarin secara efisien dan akurat di PostgreSQL sehingga mendukung fitur pencarian teks penuh yang lebih canggih.
ServBay, sebagai lingkungan pengembangan web lokal terintegrasi, telah menyediakan ekstensi pg_jieba
di dalamnya, sehingga Anda tidak lagi perlu melalui proses kompilasi dan pemasangan manual yang rumit. Ini memungkinkan Anda dengan cepat membangun, menguji, dan mengembangkan pencarian teks penuh bahasa Mandarin secara lokal.
Artikel ini akan membahas secara detail cara mengaktifkan, mengonfigurasi, dan menggunakan ekstensi pg_jieba
di lingkungan ServBay.
Prasyarat
Sebelum menggunakan pg_jieba
, pastikan Anda sudah melakukan persiapan berikut:
- ServBay telah terpasang pada sistem macOS Anda dan database PostgreSQL sudah berjalan dengan baik.
- Anda memahami operasi dasar PostgreSQL, termasuk cara terhubung ke database dan menjalankan perintah SQL.
Instalasi dan Aktivasi pg_jieba
ServBay telah mengemas ekstensi pg_jieba
bersama PostgreSQL. Anda tidak perlu mengunduh atau mengkompilasi secara manual; cukup jalankan perintah SQL sederhana untuk mengaktifkannya pada database target.
Langkah-langkah mengaktifkan ekstensi pg_jieba
adalah sebagai berikut:
Terhubung ke Database PostgreSQL Anda: Buka aplikasi terminal, lalu gunakan alat baris perintah
psql
untuk mengakses database PostgreSQL Anda. Gantilahyour_username
dengan nama pengguna database Anda danyour_database
dengan nama database yang akan digunakan. Biasanya, di ServBay, username dan nama database default adalahservbay
ataupostgres
.bashpsql -U your_username -d your_database
1Contoh menggunakan akun dan database default:
bashpsql -U servbay -d servbay
1Buat dan Aktifkan Ekstensi
pg_jieba
: Pada antarmuka baris perintahpsql
, jalankan perintah SQL berikut:sqlCREATE EXTENSION pg_jieba;
1Jika ekstensi sudah pernah dibuat, menjalankan perintah ini lagi mungkin akan menimbulkan error, dan ini normal.
Verifikasi Apakah
pg_jieba
Telah Aktif: Jalankan perintah berikut untuk menampilkan daftar ekstensi yang terinstal di database saat ini:sql\dx
1Jika Anda melihat
pg_jieba
dalam daftar, berarti ekstensi telah berhasil diaktifkan.
Konfigurasi pg_jieba untuk Pencarian Teks Penuh Bahasa Mandarin
Setelah ekstensi pg_jieba
diaktifkan, Anda perlu mengonfigurasi fitur pencarian teks (Text Search) PostgreSQL untuk menggunakan pg_jieba
sebagai pemecah kata (parser).
Menyiapkan Konfigurasi Pencarian Teks (Text Search Configuration)
Konfigurasi pencarian teks menentukan bagaimana dokumen diproses untuk pencarian teks penuh, termasuk parser yang digunakan serta penanganan tipe token yang berbeda.
Membuat Konfigurasi Pencarian Teks Baru: Buat konfigurasi teks bernama
chinese
dan pilihpg_jieba
sebagai parser-nya.sqlCREATE TEXT SEARCH CONFIGURATION chinese (PARSER = pg_jieba);
1Konfigurasi ini menginstruksikan PostgreSQL untuk menggunakan
pg_jieba
saat memproses teks.Menambahkan Mapping Token ke Kamus: Parser
pg_jieba
menghasilkan token dengan label part-of-speech (jenis kata). Agar token-token ini dapat diindeks dan dicari, Anda perlu memetakan setiap jenis ke kamus tertentu. Di sini, kita akan memetakan beberapa jenis kata seperti kata benda (n), kata kerja (v), kata sifat (a), dan lain-lain ke kamus built-insimple
PostgreSQL. Kamussimple
tidak melakukan pemrosesan tambahan pada token dari parser.sqlALTER TEXT SEARCH CONFIGURATION chinese ADD MAPPING FOR n,v,a,i,e,l WITH simple;
1Di sini,
n,v,a,i,e,l
adalah label part-of-speech yang bisa dikenali olehpg_jieba
. Anda bisa menambah atau menyesuaikan label sesuai kebutuhan. Label umum meliputi:n
: Kata bendav
: Kata kerjaa
: Kata sifati
: Idiome
: Kata serul
: Ungkapan tetapnr
: Nama orangns
: Nama geografisnt
: Nama institusi/lembaganz
: Nama khusus lainnyam
: Angkaq
: Satuan/barangt
: Waktus
: Lokasif
: Arahp
: Preposisic
: Konjungsiu
: Partikelxc
: Modal/tambahanw
: Tanda bacaeng
: Bahasa Inggrisx
: Huruf non-makna
Pada umumnya, Anda akan memilih untuk mengindeks kata benda, kerja, sifat, dan kata bermakna lainnya.
Contoh Penggunaan pg_jieba untuk Pencarian Teks Penuh
Setelah konfigurasi selesai, Anda dapat langsung menggunakan pg_jieba
untuk pencarian teks penuh bahasa Mandarin. Berikut contoh penggunaannya:
Membuat Tabel dan Data Contoh
Pertama, buat tabel untuk menyimpan dokumen dan masukkan beberapa data contoh yang mengandung teks bahasa Mandarin.
Membuat Tabel:
sqlCREATE TABLE documents ( id SERIAL PRIMARY KEY, content TEXT );
1
2
3
4Memasukkan Data Contoh:
sqlINSERT INTO documents (content) VALUES ('Saya suka teknologi pemrosesan bahasa alami'), ('Segmentasi kata Mandarin adalah tahapan penting dalam pemrosesan teks'), ('pg_jieba adalah alat segmentasi Mandarin yang sangat baik dan berbasis pustaka Jieba'), ('ServBay membuat pengembangan lokal menjadi lebih mudah dan efisien');
1
2
3
4
5
Membuat Indeks Pencarian Teks Penuh
Agar pencarian menjadi optimal, terutama saat menangani data dalam jumlah besar, sangat disarankan membuat indeks pada kolom yang digunakan untuk pencarian teks penuh. Indeks GIN (Generalized Inverted Index) PostgreSQL sangat cocok untuk kasus ini.
Membuat Indeks GIN: Gunakan fungsi
to_tsvector
bersama konfigurasichinese
untuk membuat indeks GIN pada kolomcontent
. Fungsito_tsvector('chinese', content)
akan mengubah isi teks menjadi tipe datatsvector
menggunakan konfigurasi dan pemecah katapg_jieba
.sqlCREATE INDEX idx_gin_content ON documents USING gin (to_tsvector('chinese', content));
1
Menjalankan Query Pencarian Teks Penuh
Kini Anda dapat menjalankan query pencarian teks penuh dengan fungsi to_tsquery
dan operator @@
. to_tsquery('chinese', 'query Anda')
mengubah frase pencarian menjadi tipe tsquery
berdasarkan konfigurasi chinese
. Operator @@
digunakan untuk mencocokkan tsvector
dengan tsquery
.
Melakukan Query Pencarian: Temukan dokumen yang mengandung kata "Mandarin" dan "segmentasi".
sqlSELECT id, content FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', 'Mandarin & segmentasi');
1
2
3
4
5Simbol
&
ditsquery
berarti AND logis. Anda juga bisa gunakan|
(OR logis), atau!
(NOT logis).Contoh, mencari dokumen yang mengandung "ServBay" atau "pengembangan":
sqlSELECT id, content FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', 'ServBay | pengembangan');
1
2
3
4
5
Kamus Kustom
pg_jieba
memanfaatkan kamus default milik pustaka Jieba untuk segmentasi. Pada beberapa kasus khusus, Anda mungkin ingin menambah istilah kustom (misalnya, istilah teknis atau nama produk) untuk meningkatkan akurasi segmentasi.
Anda dapat membuat file kamus kustom dan mengonfigurasi pg_jieba
untuk memakainya.
Menambahkan Istilah Kustom
Membuat File Kamus Kustom: Buat file teks pada folder konfigurasi ServBay, misalnya:
plaintext/Applications/ServBay/etc/pg_jieba/custom_dict.txt
1Ini hanyalah saran lokasi; sesuaikan dengan struktur instalasi ServBay di sistem Anda.
Menambahkan Kata pada File Kamus Kustom: Buka file
custom_dict.txt
menggunakan editor teks. Setiap baris berisi satu istilah. Anda dapat menambahkan frekuensi dan kategori word (opsional) di belakang istilah, dipisahkan spasi. Format:istilah [frekuensi [kategori]]
. Makin tinggi frekuensi, makin mudah istilah tersebut tersegmentasi.plaintextpemrosesan bahasa alami 3 n ServBay 5 eng pustaka Jieba 3 n
1
2
3Di atas,
3 n
berarti "pemrosesan bahasa alami" memiliki frekuensi 3 dan adalah kata benda (n), sedangkan5 eng
berarti "ServBay" dengan frekuensi 5 dan kategori bahasa Inggris (eng).Konfigurasi
pg_jieba
untuk Menggunakan Kamus Kustom: Pada sesi PostgreSQL, atur parameterpg_jieba.dict_path
ke direktori yang berisi file kamus kustom Anda. Catatan:pg_jieba.dict_path
umumnya merujuk ke direktori, bukan file spesifik. Jika Anda meletakkan kamus kustom di direktori yang sama dengan kamus utama atau direktori default, Anda mungkin tidak perlu mengubah parameter ini. Pastikan mengikuti petunjuk atau kebijakan konfigurasi ServBay untuk pengaturan yang tepat.Jika dalam pengaturan ServBay memungkinkan Anda menunjuk file kamus kustom langsung, atau Anda meletakkannya pada folder yang sudah otomatis dideteksi
pg_jieba
, perintah SET ini bisa saja berbeda atau bahkan tidak dibutuhkan. Berikut contoh perintah sesuai dokumentasi aslinya—pastikan menyesuaikan dengan konfigurasi ServBay Anda:sqlSET pg_jieba.dict_path = '/Applications/ServBay/etc/pg_jieba/'; -- anggap kamus utama dan kustom ada di direktori ini
1Atau, jika
pg_jieba.dict_path
memang menerima path file langsung (meski ini bukan cara standar, ikuti sesuai dokumentasi):sqlSET pg_jieba.dict_path = '/Applications/ServBay/etc/pg_jieba/custom_dict.txt'; -- gunakan dengan hati-hati, cek dokumentasi ServBay Anda
1Penting: Perintah
SET
hanya berlaku untuk sesi PostgreSQL saat ini. Agar permanen, ubah file konfigurasi PostgreSQLpostgresql.conf
dan tetapkan parameterpg_jieba.dict_path
di sana.
Memuat Ulang Kamus
Setelah mengedit file kamus kustom atau mengubah konfigurasi pg_jieba.dict_path
, Anda harus memberitahukan pg_jieba
untuk memuat ulang kamus agar perubahan berlaku.
Reload Kamus: Jalankan fungsi SQL berikut:
sqlSELECT jieba_reload_dict();
1Setelah sukses, seluruh proses segmentasi berikutnya akan menggunakan kamus versi terbaru.
Tanya Jawab (FAQ)
T: Ketika menjalankan
CREATE EXTENSION pg_jieba;
muncul pesan error "extension 'pg_jieba' is not available", apa solusinya? J: Hal ini biasanya berarti file ekstensipg_jieba
tidak terinstal di direktori ekstensi PostgreSQL, atau PostgreSQL tidak dapat menemukannya. Di ServBay,pg_jieba
seharusnya sudah disediakan. Pastikan Anda tersambung ke PostgreSQL yang dikelola oleh ServBay dan instalasi ServBay tidak rusak. Jika masalah berlanjut, coba restart ServBay atau cek log ServBay.T: Kenapa kamus kustom saya tidak berfungsi? J: Periksa beberapa hal berikut:
- Pastikan path file kamus kustom benar dan user PostgreSQL memiliki izin baca.
- Format file kamus sudah sesuai—satu istilah per baris, opsional frekuensi dan kategori dipisahkan spasi.
- Pastikan parameter
pg_jieba.dict_path
sudah diatur dengan benar. Ingat, perintahSET
hanya berlaku untuk sesi saat ini; agar permanen, modifikasipostgresql.conf
. - Pastikan Anda menjalankan
SELECT jieba_reload_dict();
untuk reload kamus. - Jika Anda sudah mengedit
postgresql.conf
, jangan lupa restart layanan PostgreSQL.
T: Kenapa hasil pencarian teks penuh kurang akurat? J: Akurasi pencarian sangat tergantung pada hasil segmentasi dan perumusan query.
- Cek hasil segmentasi: Gunakan fungsi
ts_debug('chinese', 'teks Anda')
untuk melihat bagaimana konfigurasichinese
memecah teks. Ini membantu memvalidasi apakahpg_jieba
dan kamus kustom bekerja dengan benar. - Optimalkan konfigurasi pemetaan: Atur ulang mapping dalam
ALTER TEXT SEARCH CONFIGURATION chinese ADD MAPPING FOR ... WITH simple;
untuk menghapus part-of-speech yang kurang penting (misal: partikel, tanda baca). - Optimalkan query pencarian: Pastikan penggunaan kata kunci dan operator logika (
&
,|
,!
) benar-benar mencerminkan tujuan pencarian Anda.
- Cek hasil segmentasi: Gunakan fungsi
Kesimpulan
pg_jieba
adalah alat yang ampuh untuk membawa fitur pencarian teks penuh bahasa Mandarin ke dalam PostgreSQL. Dengan ekstensi pg_jieba
yang sudah dibundle oleh ServBay, pengembang bisa dengan mudah mengaktifkan dan mengonfigurasi segmentasi kata Mandarin di lingkungan lokal. Melalui panduan ini, Anda telah mempelajari cara memasang pg_jieba
di ServBay, membuat dan mengatur konfigurasi pencarian teks, melakukan query pencarian dasar, hingga menggunakan kamus kustom untuk hasil segmentasi yang optimal. Terapkan teknik-teknik ini dalam proyek Anda untuk meningkatkan performa dan ketercapaian fitur pencarian konten berbahasa Mandarin.