All Products
Search
Document Center

PolarDB:Gunakan Tokenisasi Bahasa Tiongkok

Last Updated:Jan 06, 2026

Fitur indeks teks penuh bawaan PostgreSQL tidak memproses teks Mandarin secara efektif. Topik ini menjelaskan cara menggunakan ekstensi zhparser di dan PolarDB for PostgreSQL (Kompatibel dengan Oracle) guna mengaktifkan pengindeksan teks penuh Mandarin yang efisien dan akurat.

Aktifkan Tokenisasi Bahasa Tiongkok

  • Aktifkan ekstensi tersebut.

    CREATE EXTENSION IF NOT EXISTS zhparser;
  • Buat konfigurasi tokenisasi bahasa Tiongkok.

    -- Buat konfigurasi bernama zh_cfg dan tentukan parser sebagai zhparser.
    CREATE TEXT SEARCH CONFIGURATION zh_cfg (PARSER = zhparser);
    
    -- Tambahkan pemetaan untuk tipe token tertentu, seperti kata benda (n), kata kerja (v), dan kata sifat (a).
    -- Ini menggunakan kamus 'simple', yang mengubah teks menjadi huruf kecil dan memeriksa stop words.
    ALTER TEXT SEARCH CONFIGURATION zh_cfg ADD MAPPING FOR n,v,a,i,e,l WITH simple;
  • Atur parameter global.

    Ekstensi zhparser menyediakan parameter yang dapat disesuaikan. Anda dapat mengatur parameter ini menggunakan perintah ALTER ROLE atau ALTER DATABASE.

    -- Contoh: Aktifkan mode "multi-short phrase". Mode ini mencoba menggabungkan karakter tunggal yang bersebelahan untuk membentuk kata yang lebih panjang.
    ALTER ROLE ALL SET zhparser.multi_short = ON;
  • Uji hasil tokenisasi.

    -- 1. Uji analisis leksikal dasar (ts_parse).
    SELECT * FROM ts_parse('zhparser', 'In 2011, affordable housing entered a larger-scale construction phase.');
    
    -- 2. Uji konversi teks menjadi penyematan kata (to_tsvector).
    --    Ini menggunakan konfigurasi 'zh_cfg' yang baru saja dibuat.
    SELECT to_tsvector('zh_cfg', 'Compared to 2011, the pressure on funding for affordable housing construction in 2012 will be more severe.');
    
    -- 3. Uji konversi string kueri menjadi pohon kueri (to_tsquery).
    --    'affordable housing' & 'funding' & 'pressure'
    SELECT to_tsquery('zh_cfg', 'affordable housing & funding & pressure');
    

Buat dan gunakan indeks teks penuh

  1. Persiapkan tabel dan data contoh:

    -- Buat contoh tabel t1.
    CREATE TABLE t1 (
        id SERIAL PRIMARY KEY,
        name TEXT
    );
    
    -- Masukkan beberapa data uji.
    INSERT INTO t1 (name) VALUES
    ('Pemerintah pusat meningkatkan pembangunan dan investasi di perumahan terjangkau'),
    ('Tekanan pendanaan untuk perumahan terjangkau sangat berat'),
    ('Pencegahan kebakaran dan pencurian menjadi fokus pekerjaan keamanan');
  2. Buat indeks GIN untuk bidang target:

    Buat indeks GIN pada bidang name di tabel t1, berdasarkan konfigurasi zh_cfg.

    -- Buat indeks GIN untuk bidang name menggunakan konfigurasi 'zh_cfg'.
    CREATE INDEX idx_gin_t1_name ON t1 USING gin (to_tsvector('zh_cfg', name));
  3. Jalankan kueri indeks teks penuh yang efisien:

    Anda dapat menggunakan operator @@ untuk menjalankan kueri. Ekspresi to_tsvector dalam klausa WHERE harus persis sama dengan ekspresi dalam pernyataan CREATE INDEX agar pengoptimal dapat menggunakan indeks yang telah dibuat.

    -- Contoh 1: Kueri catatan yang berisi "affordable housing".
    -- Ekspresi kueri to_tsvector('zh_cfg', name) persis sesuai dengan definisi indeks dan akan menggunakan indeks secara efisien.
    SELECT name FROM t1 WHERE to_tsvector('zh_cfg', name) @@ to_tsquery('zh_cfg', 'affordable housing');
    
    -- Contoh 2: Kueri catatan yang berisi "affordable housing" dan "funding" (menggunakan operator &).
    SELECT name FROM t1 WHERE to_tsvector('zh_cfg', name) @@ to_tsquery('zh_cfg', 'affordable housing & funding');
    
    -- Contoh 3: Kueri catatan yang berisi "fire prevention".
    SELECT name FROM t1 WHERE to_tsvector('zh_cfg', name) @@ to_tsquery('zh_cfg', 'fire prevention');