All Products
Search
Document Center

ApsaraDB RDS:Segmentasi kata bahasa Tionghoa (zhparser)

Last Updated:Mar 29, 2026

Ekstensi zhparser memungkinkan pencarian teks penuh untuk bahasa Tionghoa pada ApsaraDB RDS for PostgreSQL. Berbeda dengan bahasa Inggris, teks bahasa Tionghoa tidak memiliki spasi antar kata, sehingga parser bawaan PostgreSQL tidak dapat melakukan segmentasi secara tepat. zhparser melakukan segmentasi teks bahasa Tionghoa berdasarkan semantik, sehingga memungkinkan pengindeksan dan pencarian teks penuh yang akurat.

Prasyarat

Sebelum memulai, pastikan bahwa:

  • Instans RDS menjalankan PostgreSQL 10 atau versi yang lebih baru.

  • Versi mesin minor adalah 20230830 atau lebih baru. Untuk PostgreSQL 17, versi mesin minor harus 20241030 atau lebih baru.

  • zhparser telah ditambahkan ke parameter shared_preload_libraries instans. Untuk petunjuknya, lihat Modifikasi parameter instans ApsaraDB RDS for PostgreSQL.

Penting

Ekstensi baru dan yang dibuat ulang memerlukan versi mesin minor 20230830 atau lebih baru. Jika instans Anda menjalankan versi sebelumnya, perbarui terlebih dahulu sebelum membuat ekstensi. Lihat Perbarui versi mesin minor. Jika ekstensi sudah terpasang pada versi sebelumnya, ekstensi tersebut tetap berfungsi. Untuk informasi selengkapnya, lihat [Perubahan produk/Perubahan fitur] Batasan pembuatan ekstensi untuk instans ApsaraDB RDS for PostgreSQL.

Aktifkan zhparser

Jalankan pernyataan berikut untuk membuat ekstensi dan mengonfigurasi konfigurasi pencarian teks bernama testzhcfg:

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;
-- Opsional: aktifkan komposisi kata pendek untuk segmentasi yang lebih granular
ALTER ROLE CURRENT_ROLE SET zhparser.multi_short=on;

Baris ADD MAPPING FOR n,v,a,i,e,l memetakan enam tipe token inti (n, v, a, i, e, l) ke kamus simple.

Verifikasi segmentasi

Pencarian teks penuh PostgreSQL menggunakan tiga fungsi utama:

FungsiTujuanContoh input → output
ts_parse()Mengembalikan output token mentah beserta ID tipe tokennyaToken mentah dari parser
to_tsvector()Mengonversi teks menjadi leksem ternormalisasi untuk pengindeksanTeks → daftar leksem terindeks
to_tsquery()Mengonversi frasa menjadi ekspresi kueriFrasa → kueri untuk pencocokan terhadap tsvector

Untuk memverifikasi bahwa zhparser melakukan segmentasi teks dengan benar, jalankan kueri uji berikut:

-- Uji output token mentah
-- Mengembalikan set hasil (tokid, token), di mana tokid mengidentifikasi tipe token
SELECT * FROM ts_parse('zhparser', 'hello world! 2010年保障房建设在全国范围内获全面启动,从中央到地方纷纷加大 了 保 障 房 的 建 设 和 投 入 力 度 。 2011年,保障房进入了更大规模的建设阶段。 住房城乡建设部党组书记、部长姜伟新去年底在全国住房城乡建设工作会议上表示,要继续推进保障性安居工程建设。 ');

-- Konversi teks menjadi tsvector (daftar leksem ternormalisasi yang digunakan untuk pengindeksan)
SELECT to_tsvector('testzhcfg','"今年保障房新开工数量虽然有所下调,但实际的年度在建规模以及竣工规模会超以往年份,相对应的对资金的需求也会创历史纪录。"陈国强说。 在他看来,与2011年相比,2012年的保障房建设在资金配套上的压力将更为严峻。 ');

-- Konversi frasa pencarian menjadi tsquery untuk digunakan dengan operator @@
SELECT to_tsquery('testzhcfg', '保障房资金压力');

Buat indeks teks penuh dan jalankan kueri

Setelah mengaktifkan zhparser, buat indeks GIN (Generalized Inverted Index) pada kolom yang akan dicari. Contoh berikut membuat indeks teks penuh pada kolom name tabel t1:

-- Ganti t1 dan name dengan nama tabel dan kolom aktual Anda
CREATE INDEX idx_t1 ON t1 USING gin (to_tsvector('testzhcfg', upper(name)));

Gunakan operator @@ untuk mencocokkan baris terhadap kueri pencarian:

SELECT * FROM t1 WHERE to_tsvector('testzhcfg', upper(t1.name)) @@ to_tsquery('testzhcfg', '(防火)');
Catatan

Indeks dan klausa WHERE harus menggunakan ekspresi yang sama — to_tsvector('testzhcfg', upper(name)) — agar PostgreSQL dapat menggunakan indeks selama eksekusi kueri.

Tambahkan segmen kata kustom

Untuk menambahkan istilah spesifik domain yang tidak disegmentasi dengan benar oleh kamus bawaan, masukkan istilah tersebut ke dalam pg_ts_custom_word.

Contoh berikut menambahkan 保障房资 sebagai satu segmen kata:

-- Periksa hasil segmentasi saat ini
SELECT to_tsquery('testzhcfg', '保障房资金压力');

-- Tambahkan segmen kata baru
INSERT INTO pg_ts_custom_word VALUES ('保障房资');

-- Sinkronkan kamus untuk menerapkan perubahan
SELECT zhprs_sync_dict_xdb();

-- Sambungkan ulang ke database (sesi baru akan menggunakan kamus yang diperbarui)
\c

-- Verifikasi hasil segmentasi baru
SELECT to_tsquery('testzhcfg', '保障房资金压力');
Catatan

Setelah menambahkan, menghapus, atau mengubah segmen kata, Anda harus memanggil zhprs_sync_dict_xdb() dan menyambungkan ulang ke database agar perubahan diterapkan. Perubahan tidak berlaku untuk sesi yang sudah ada.

Batasan kamus kustom

BatasanNilai
Jumlah maksimum segmen kata kustom1.000.000
Panjang maksimum per segmen kata128 byte

Jika jumlah segmen kata melebihi 1.000.000, segmen kata yang melebihi batas tersebut akan diabaikan. Segmen kata yang lebih panjang dari 128 byte akan dipotong pada byte ke-128.

Kamus kustom dan kamus bawaan aktif secara bersamaan.