Topik ini menjelaskan cara menggunakan ekstensi zhparser untuk melakukan pencarian teks penuh dalam bahasa Cina pada instance ApsaraDB RDS for PostgreSQL.
Prasyarat
Instance RDS menjalankan PostgreSQL 10 atau yang lebih baru.
Instance RDS Anda menjalankan versi mesin minor 20230830 atau yang lebih baru. Jika instance RDS Anda menjalankan PostgreSQL 17, versi mesin minor dari instance tersebut harus 20241030 atau yang lebih baru.
PentingEkstensi ini didukung di beberapa versi mesin minor sebelum 20230830. Namun, ApsaraDB RDS berencana mengoptimalkan ekstensi rentan dalam pembaruan versi mesin minor untuk manajemen ekstensi yang terstandarisasi dan peningkatan keamanan. Oleh karena itu, Anda tidak dapat membuat ekstensi ini untuk instance RDS yang menjalankan versi mesin minor sebelum 20230830. Untuk informasi lebih lanjut, lihat [Perubahan Produk/Perubahan Fitur] Batasan pembuatan ekstensi untuk instance ApsaraDB RDS for PostgreSQL.
Jika Anda sudah membuat ekstensi ini untuk instance RDS Anda yang menjalankan versi mesin minor sebelum 20230830, Anda dapat terus menggunakannya.
Jika Anda membuat ekstensi ini untuk pertama kali atau perlu membuat ulang ekstensi untuk instance RDS Anda, Anda harus memperbarui versi mesin minor dari instance RDS ke versi terbaru. Untuk informasi lebih lanjut, lihat Perbarui versi mesin minor.
zhparser ditambahkan ke nilai parameter shared_preload_libraries dari instance RDS Anda.
Untuk informasi lebih lanjut tentang cara menambahkan nama ekstensi zhparser ke nilai parameter shared_preload_libraries, lihat Ubah parameter instance ApsaraDB RDS for PostgreSQL.
Informasi latar belakang
PostgreSQL sumber terbuka menyediakan ekstensi parser bawaan yang dapat memisahkan teks dalam bahasa seperti Inggris yang memiliki tanda baca serta spasi antar kata. Namun, teks dalam bahasa Cina tidak memiliki spasi antar kata dan perlu dipisahkan berdasarkan semantik, serta panjang teksnya tidak tetap. Oleh karena itu, kami merekomendasikan penggunaan ekstensi zhparser daripada ekstensi parser untuk memisahkan teks dalam bahasa Cina.
Ekstensi zhparser dari PostgreSQL dapat memisahkan teks dalam bahasa Cina. Setelah menginstal ekstensi zhparser pada instance RDS Anda, Anda dapat menjalankan pencarian teks penuh dalam bahasa Cina pada instance RDS tersebut.
Aktifkan ekstensi zhparser
Eksekusi pernyataan berikut untuk mengaktifkan ekstensi zhparser:
CREATE EXTENSION zhparser;
CREATE TEXT SEARCH CONFIGURATION testzhcfg (PARSER = zhparser);
ALTER TEXT SEARCH CONFIGURATION testzhcfg ADD MAPPING FOR n,v,a,i,e,l WITH simple;
--Konfigurasi parameter opsional
ALTER ROLE CURRENT_ROLE SET zhparser.multi_short=on;
--Tes sederhana
SELECT * FROM ts_parse('zhparser', 'hello world! 2010年保障房建设在全国范围内获全面启动,从中央到地方纷纷加大 了 保 障 房 的 建 设 和 投 入 力 度 。 2011年,保障房进入了更大规模的建设阶段。 住房城乡建设部党组书记、部长姜伟新去年底在全国住房城乡建设工作会议上表示,要继续推进保障性安居工程建设。 ');
SELECT to_tsvector('testzhcfg','“今年保障房新开工数量虽然有所下调,但实际的年度在建规模以及竣工规模会超以往年份,相对应的对资金的需求也会创历史纪录。”陈国强说。 在他看来,与2011年相比,2012年的保障房建设在资金配套上的压力将更为严峻。 ');
SELECT to_tsquery('testzhcfg', '保障房资金压力');Eksekusi pernyataan berikut untuk mengaktifkan ekstensi zhparser guna menjalankan pencarian teks penuh:
-- Buat indeks teks penuh untuk bidang nama tabel t1. Anda harus mengganti t1 dan nama dalam pernyataan SQL dengan nama tabel dan nilai bidang aktual berdasarkan kebutuhan bisnis Anda.
CREATE index idx_t1 ON t1 using gin (to_tsvector('testzhcfg',upper(name) ));
-- Gunakan indeks teks penuh.
SELECT * FROM t1 WHERE to_tsvector('testzhcfg',upper(t1.name)) @@ to_tsquery('testzhcfg','(防火)');Kustomisasi kamus segmentasi kata Cina
Eksekusi pernyataan berikut untuk menyesuaikan kamus segmentasi kata Cina:
-- Hasil segmentasi
SELECT to_tsquery('testzhcfg', '保障房资金压力');
-- Masukkan segmen kata baru ke dalam kamus
INSERT INTO pg_ts_custom_word VALUES ('保障房资');
-- Jadikan segmen kata yang dimasukkan efektif
SELECT zhprs_sync_dict_xdb();
-- Akhiri koneksi
\c
-- Kueri ulang untuk mendapatkan hasil segmentasi baru
SELECT to_tsquery('testzhcfg', '保障房资金压力');Petunjuk penggunaan segmen kata kustom:
Maksimal 1 juta segmen kata kustom dapat ditambahkan. Jika jumlah segmen kata melebihi batas, segmen kata di luar batas tidak akan diproses. Pastikan jumlah segmen kata berada dalam rentang ini. Kamus segmentasi kata kustom dan default berlaku secara bersamaan.
Setiap segmen kata dapat memiliki panjang maksimum 128 byte. Bagian setelah byte ke-128 akan dipotong.
Setelah menambahkan, menghapus, atau mengubah segmen kata, eksekusi pernyataan
SELECT zhprs_sync_dict_xdb();dan buat kembali koneksi untuk menerapkan operasi tersebut.