All Products
Search
Document Center

AnalyticDB:Zhparser

Last Updated:Mar 29, 2026

Parser teks bawaan PostgreSQL memisahkan input berdasarkan spasi dan tanda baca, yang efektif untuk bahasa Eropa karena batas kata ditandai dengan spasi. Namun, teks bahasa Tiongkok tidak memiliki spasi antar kata, sehingga parser bawaan memperlakukan seluruh kalimat sebagai satu token dan tidak dapat mencocokkan kata-kata individual. Ekstensi zhparser mengatasi keterbatasan ini dengan menerapkan leksikon khusus bahasa Tiongkok dan algoritma segmentasi, sehingga memungkinkan pencarian teks penuh pada konten berbahasa Tiongkok di AnalyticDB for PostgreSQL.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

Cara kerja pencarian teks penuh di PostgreSQL

Pencarian teks penuh di PostgreSQL bergantung pada dua tipe data:

  • tsvector — representasi dokumen yang telah diproses sebelumnya, menyimpan leksem ternormalisasi beserta posisinya

  • tsquery — ekspresi kueri pencarian

Dua pola kueri umum:

Kueri langsung:

SELECT name FROM <table>
WHERE to_tsvector('english', name) @@ to_tsquery('english', 'friend');

Dengan indeks Generalized Inverted Index (GIN) untuk performa lebih baik:

CREATE INDEX <idx_name> ON <table> USING gin(to_tsvector('english', name));

Setelah Anda mengonfigurasi zhparser, ganti 'english' dengan 'zh_cn' pada kedua pola tersebut untuk mengaktifkan segmentasi bahasa Tiongkok.

Konfigurasi zhparser

Langkah 1: Buat konfigurasi pencarian teks

Setelah menginstal ekstensi, buat konfigurasi pencarian teks bernama zh_cn yang menggunakan zhparser sebagai parser-nya:

CREATE TEXT SEARCH CONFIGURATION zh_cn (PARSER = zhparser);

Untuk memverifikasi bahwa konfigurasi telah dibuat, jalankan \dF atau \dFp di psql.

Langkah 2: Tinjau tipe token yang tersedia

zhparser mengklasifikasikan teks bahasa Tiongkok ke dalam 26 tipe token. Jalankan perintah berikut untuk melihat daftarnya:

SELECT ts_token_type('zhparser');

Output menampilkan semua tipe yang tersedia:

 tokid | alias |      description
-------+-------+--------------------
    97 | a     | adjective
    98 | b     | differentiation
    99 | c     | conjunction
   100 | d     | adverb
   101 | e     | exclamation
   102 | f     | position
   103 | g     | root
   104 | h     | head
   105 | i     | idiom
   106 | j     | abbreviation
   107 | k     | tail
   108 | l     | tmp
   109 | m     | numeral
   110 | n     | noun
   111 | o     | onomatopoeia
   112 | p     | prepositional
   113 | q     | quantity
   114 | r     | pronoun
   115 | s     | space
   116 | t     | time
   117 | u     | auxiliary
   118 | v     | verb
   119 | w     | punctuation
   120 | x     | unknown
   121 | y     | modal
   122 | z     | status
(26 rows)

Untuk memeriksa konfigurasi zh_cn saat ini:

SELECT * FROM pg_ts_config_map
WHERE mapcfg = (SELECT oid FROM pg_ts_config WHERE cfgname = 'zh_cn');

Langkah 3: Petakan tipe token ke kamus

Tambahkan pemetaan untuk menentukan tipe token mana yang diindeks. Contoh berikut memetakan kata benda, kata kerja, kata sifat, idiom, seruan, dan idiom sementara ke kamus simple:

ALTER TEXT SEARCH CONFIGURATION zh_cn ADD MAPPING FOR n,v,a,i,e,l WITH simple;

Untuk menghapus pemetaan tersebut:

ALTER TEXT SEARCH CONFIGURATION zh_cn DROP MAPPING IF EXISTS FOR n,v,a,i,e,l;

Langkah 4: Verifikasi segmentasi

Uji to_tsvector dan to_tsquery dengan konfigurasi zh_cn:

SELECT to_tsvector('zh_cn', '有两种方法进行全文检索');
              to_tsvector
--------------------------------------
 '全文检索':4 '方法':2 '有':1 '进行':3
(1 row)
SELECT to_tsquery('zh_cn', '有两种方法进行全文检索');
              to_tsquery
-------------------------------------
 '有' & '方法' & '进行' & '全文检索'
(1 row)

Kamus kustom

zhparser mendukung tabel kamus kustom — zhparser.zhprs_custom_word — untuk menambahkan istilah spesifik domain atau stop word. Tabel ini dibuat secara otomatis saat Anda menginstal ekstensi.

Struktur tabel

CREATE TABLE zhparser.zhprs_custom_word
(
    word text PRIMARY KEY,                                    -- Kata kustom
    tf   FLOAT DEFAULT '1.0',                                -- Frekuensi istilah (TF). Default: 1.0.
    idf  FLOAT DEFAULT '1.0',                                -- Frekuensi invers dokumen (IDF). Default: 1.0.
    attr CHAR  DEFAULT '@', CHECK(attr = '@' OR attr = '!')  -- Jenis kata: @ (kata baru), ! (stop word).
);

Konfigurasi kamus kustom

Tambahkan pemetaan agar token unknown (tipe x) dicari di kamus kustom:

ALTER TEXT SEARCH CONFIGURATION zh_cn ADD MAPPING FOR x WITH simple;

Tambah dan hapus kata

Tambahkan kata ke kamus kustom:

INSERT INTO zhparser.zhprs_custom_word(word, attr) VALUES('两种方法', '@');

Hapus kata:

DELETE FROM zhparser.zhprs_custom_word WHERE word = '两种方法';

Kueri semua entri:

SELECT * FROM zhparser.zhprs_custom_word;

Muat ulang dan verifikasi

Setelah melakukan perubahan apa pun pada zhparser.zhprs_custom_word, muat ulang tabel agar perubahan diterapkan:

SELECT sync_zhprs_custom_word();

Jalankan kueri yang sama sebelum dan sesudah untuk mengonfirmasi efeknya:

SELECT to_tsvector('zh_cn', '有两种方法进行全文检索');

Sebelum menambahkan `两种方法` — frasa tersebut dipisah menjadi token individual:

              to_tsvector
--------------------------------------
 '全文检索':4 '方法':2 '有':1 '进行':3
(1 row)

Setelah menambahkan `两种方法` — frasa tersebut diperlakukan sebagai satu kesatuan:

                  to_tsvector
----------------------------------------------
 '两种方法':2 '全文检索':4 '有':1 '进行':3
(1 row)

Langkah selanjutnya