All Products
Search
Document Center

Hologres:Indeks Terbalik Pencarian Teks Penuh

Last Updated:Mar 20, 2026

Hologres mendukung indeks terbalik pencarian teks penuh mulai dari versi 4.0. Fitur ini memanfaatkan mesin pencarian teks penuh berkinerja tinggi Tantivy untuk memberikan kemampuan pencarian yang cepat dan akurat, termasuk dukungan algoritma perhitungan skor kesamaan BM25. Anda dapat menggunakannya untuk peringkat dokumen, pencarian kata kunci, pencarian frasa, dan lainnya.

Cara Kerja

Setelah Anda menulis data teks ke Hologres, sistem membuat file indeks terbalik pencarian teks penuh untuk setiap file data berdasarkan konfigurasi indeks yang ditentukan. Pertama, tokenizer membagi teks menjadi token. Kemudian, indeks mencatat pemetaan antara setiap token dan teks sumbernya, lengkap dengan informasi posisi dan frekuensi kata kunci.

Saat menjalankan pencarian, Hologres terlebih dahulu melakukan tokenisasi pada teks kueri untuk mendapatkan kumpulan token kueri. Selanjutnya, sistem menggunakan algoritma BM25 untuk menghitung skor relevansi setiap dokumen sumber terhadap kumpulan token tersebut, sehingga memungkinkan pencarian teks penuh yang cepat dan tepat.

Catatan Penting

  • Indeks terbalik pencarian teks penuh hanya dapat digunakan pada tabel berorientasi kolom dan tabel hibrida baris-kolom di Hologres versi 4.0 atau lebih baru. Tabel berorientasi baris tidak didukung.

  • Indeks terbalik pencarian teks penuh hanya dapat dibuat pada kolom bertipe TEXT, CHAR, atau VARCHAR.

  • Hanya satu indeks terbalik pencarian teks penuh yang dapat dibuat pada satu kolom dalam satu waktu. Untuk mengindeks beberapa kolom, buat indeks terpisah untuk masing-masing kolom.

  • Setelah pembuatan indeks terbalik pencarian teks penuh, Hologres membangun file indeks secara asinkron selama proses compaction, baik untuk data yang sudah ada maupun data baru yang dimasukkan secara batch. Skor relevansi BM25 untuk data tersebut bernilai nol hingga file indeks selesai dibangun.

  • Untuk penulisan data real-time setelah pembuatan indeks: sebelum Hologres versi 4.0.8, indeks dibangun secara sinkron saat data tiba. Mulai versi 4.0.8, demi menyeimbangkan kinerja penulisan real-time dan efisiensi pengindeksan, Hologres merefresh indeks real-time di memori setiap detik. Anda hanya dapat melakukan kueri data setelah setiap refresh.

  • Pencarian teks penuh hanya berfungsi pada kolom yang memiliki indeks teks penuh dan tidak mendukung komputasi brute-force pada kolom yang tidak diindeks.

  • Kami menyarankan menggunakan resource Serverless Computing untuk impor data batch. Resource Serverless melakukan compaction dan membangun indeks teks penuh secara sinkron selama impor. Untuk detailnya, lihat Jalankan Tugas Baca/Tulis dengan Serverless Computing dan Jalankan Tugas Compaction dengan Serverless Computing. Jika tidak menggunakan resource Serverless, picu compaction secara manual setelah mengimpor data batch atau mengubah indeks dengan menjalankan perintah berikut: Compaction.

    VACUUM <schema_name>.<table_name>;
  • Skor relevansi BM25 dihitung per file. Jika volume data kecil, picu compaction secara manual untuk menggabungkan file dan meningkatkan akurasi pencarian.

  • Anda dapat menjalankan kueri pencarian teks penuh menggunakan resource Serverless Computing.

  • Pilih tokenizer sesuai kasus penggunaan Anda, seperti yang ditunjukkan pada tabel berikut:

    Skenario

    Tokenizer

    Catatan

    Ekstraksi kata kunci dari artikel panjang

    Jieba

    Mendukung penemuan kata baru dan pergantian pola kompleks.

    Pencarian teks deskriptif Bahasa Tionghoa

    IK

    Mengidentifikasi istilah Bahasa Tionghoa secara akurat.

    Pencarian teks judul Bahasa Inggris

    Simple, Whitespace, Standard

    Sederhana dan efisien. Pilih berdasarkan teks Bahasa Inggris Anda.

    Pencarian teks log fuzzy

    Ngram

    Tidak memerlukan kamus. Memenuhi kebutuhan kueri fuzzy.

    Pencarian pinyin untuk produk atau nama Tionghoa

    Pinyin

    Mendukung pinyin lengkap, huruf awal, dan inferensi karakter homofon.

Kelola Indeks

Buat Indeks

Sintaksis

CREATE INDEX [ IF NOT EXISTS ] idx_name ON table_name
       USING FULLTEXT (column_name [ , ... ])
       [ WITH ( storage_parameter [ = value ] [ , ... ] ) ];

Deskripsi Parameter

Parameter

Deskripsi

idx_name

Nama indeks.

table_name

Nama tabel target.

column_name

Kolom target untuk indeks terbalik pencarian teks penuh.

storage_parameter

Konfigurasikan parameter indeks terbalik pencarian teks penuh. Parameter yang didukung meliputi:

  • tokenizer: Nama tokenizer. Tokenizer yang didukung meliputi:

    • jieba (default): Tokenizer Bahasa Tionghoa yang menggabungkan pencocokan berbasis aturan dan model statistik.

    • whitespace: Membagi teks berdasarkan spasi.

    • standard: Menggunakan Unicode Standard Annex #29 untuk tokenisasi. Lihat Unicode Standard Annex #29.

    • simple: Membagi teks berdasarkan spasi dan tanda baca.

    • keyword: Mengembalikan input tanpa perubahan apa pun.

    • icu: Tokenizer multibahasa.

    • ik: Tokenizer Bahasa Tionghoa berbasis IK Analyzer. Secara otomatis mendeteksi kata Bahasa Inggris, alamat email, URL (tanpa ://), dan alamat IP. Tersedia mulai Hologres versi 4.0.9.

    • ngram: Tokenizer jendela geser tingkat karakter. Membagi teks menjadi urutan kontinu n-karakter atau n-token (n-gram) untuk meningkatkan recall dan pencocokan kabur. Ideal untuk mempercepat kueri LIKE dan ILIKE. Tersedia mulai Hologres versi 4.0.9.

    • pinyin: Tokenizer yang menghasilkan pinyin untuk karakter dan kata Bahasa Tionghoa. Juga melakukan inferensi pinyin untuk string non-Tionghoa untuk meningkatkan akurasi dan recall. Tersedia mulai Hologres versi 4.0.9.

  • analyzer_params: Konfigurasi tokenizer. Harus berupa string JSON.

    • Setiap tokenizer memiliki analyzer_params default. Dalam kebanyakan kasus, gunakan default dengan hanya menentukan parameter tokenizer. Jangan atur analyzer_params secara eksplisit kecuali diperlukan.

    • Anda dapat menyesuaikan beberapa pengaturan. Untuk detailnya, lihat Lanjutan: Menyesuaikan Konfigurasi Tokenizer.

  • index_options: Tingkat pencatatan untuk indeks terbalik pencarian teks penuh. Mengontrol seberapa banyak informasi yang disimpan oleh indeks dan fitur apa saja yang didukungnya. Tersedia mulai Hologres versi 4.1.9. Nilai dan deskripsi valid tercantum di bagian berikut: Detail Konfigurasi index_options.

Catatan

Anda hanya dapat menentukan satu tokenizer dan satu pengaturan analyzer_params per indeks.

Detail Konfigurasi index_options

index_options mendukung tiga tingkat. Tingkat yang lebih tinggi mencakup semua informasi dari tingkat yang lebih rendah: freqs mencakup docs, dan positions mencakup freqs dan docs.

Nilai

Konten Indeks

Dampak Fitur dan Batasan

Kasus Penggunaan Khas

positions (default)

ID Dokumen + Frekuensi Kata Kunci + Posisi Kata Kunci

Dukungan fitur lengkap: Mendukung kueri frasa dan perhitungan skor relevansi standar.

Pencarian teks penuh umum

freqs

ID Dokumen + Frekuensi Kata Kunci

Kueri frasa gagal karena informasi posisi tidak tersedia.

Perhitungan skor dan pengurutan berdasarkan frekuensi kata kunci, tetapi tidak memerlukan pencocokan frasa eksak

docs

Hanya ID Dokumen

  • Tanpa frekuensi kata kunci, perhitungan skor mengabaikan perbedaan frekuensi (semua dokumen yang cocok mendapatkan skor TF yang sama).

  • Kueri frasa gagal karena informasi posisi tidak tersedia.

Hanya pemeriksaan keberadaan (filtering melalui indeks teks penuh). Sensitif terhadap penyimpanan dan tidak memerlukan pengurutan relevansi

Catatan

Untuk indeks yang menggunakan tokenizer keyword, tingkat pencatatan tetap di docs dan tidak dapat diubah melalui index_options.

Contoh

  • Buat indeks terbalik pencarian teks penuh menggunakan tokenizer default (jieba) dan konfigurasi default.

    CREATE INDEX idx1 ON tbl 
           USING FULLTEXT (col1);
  • Gunakan tokenizer ik secara eksplisit dengan konfigurasi default-nya.

    CREATE INDEX idx1 ON tbl 
           USING FULLTEXT (col1)
           WITH (tokenizer = 'ik');
  • Gunakan konfigurasi tokenizer jieba kustom: mode exact dan hanya filter lowercase.

    CREATE INDEX idx1 ON tbl 
           USING FULLTEXT (col1)
           WITH (tokenizer = 'jieba',
                 analyzer_params = '{"tokenizer":{"type":"jieba","mode":"exact"}, "filter":["lowercase"]}');
  • Atur index_options ke freqs saat membuat indeks (menghemat ruang tetapi menonaktifkan kueri frasa). Tersedia mulai Hologres versi 4.1.9.

    CREATE INDEX idx1 ON tbl
           USING FULLTEXT (col1)
           WITH (index_options = 'freqs');
Catatan

Ubah Indeks

Sintaksis

-- Ubah konfigurasi indeks
ALTER INDEX [ IF EXISTS ] <idx_name> SET ( <storage_parameter> = '<storage_value>' [ , ... ] );

-- Kembalikan ke konfigurasi default
ALTER INDEX [ IF EXISTS ] <idx_name> RESET ( <storage_parameter> [ , ... ] );

Deskripsi Parameter

Untuk detail parameter lengkap, lihat Deskripsi Parameter.

Contoh

Catatan

Setelah mengubah indeks terbalik pencarian teks penuh, file indeks dibangun secara asinkron selama compaction. Jalankan VACUUM <schema_name>.<table_name>; untuk memicu compaction segera. Untuk detailnya, lihat Compaction.

  • Ubah tokenizer ke standard.

    ALTER INDEX idx1 SET (tokenizer = 'standard');
  • Ubah tokenizer ke ik dalam mode ik_max_word, nonaktifkan konversi lowercase, dan tidak menerapkan filter.

    ALTER INDEX idx1 SET (
      tokenizer = 'ik',
      analyzer_params = '{"tokenizer":{"type":"ik","mode":"ik_max_word","enable_lowercase": false}}'
    );
  • Kembalikan tokenizer jieba default dan analyzer_params default-nya.

    ALTER INDEX idx1 RESET (tokenizer);
    ALTER INDEX idx1 RESET (tokenizer, analyzer_params);
  • Kembalikan analyzer_params default untuk tokenizer saat ini.

    ALTER INDEX idx1 RESET (analyzer_params);
  • Ubah index_options ke docs.

    ALTER INDEX idx1 SET (index_options = 'docs');
  • Kembalikan index_options ke nilai default (positions).

    ALTER INDEX idx1 RESET (index_options);

Hapus Indeks

Sintaksis

DROP INDEX [ IF EXISTS ] <idx_name> [ RESTRICT ];

Deskripsi Parameter

Untuk detail parameter lengkap, lihat Deskripsi Parameter.

Lihat Indeks

Hologres menyediakan tabel sistem hologres.hg_index_properties untuk mencantumkan indeks terbalik pencarian teks penuh dan lokasinya.

SELECT * FROM hologres.hg_index_properties;

Jalankan SQL ini untuk melihat tabel dan kolom yang terkait dengan suatu indeks.

SELECT 
    t.relname AS table_name, 
    a.attname AS column_name
FROM pg_class t
    JOIN pg_index i ON t.oid = i.indrelid
    JOIN pg_class idx ON i.indexrelid = idx.oid
    JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = ANY(i.indkey)
WHERE t.relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = '<namespace>')
    AND idx.relname = '<indexname>'
LIMIT 1;

Deskripsi parameter:

  • namespace: Nilai field table_namespace dalam output SELECT * FROM hologres.hg_index_properties;.

  • indexname: Nama indeks aktual yang Anda buat.

Gunakan Indeks Terbalik Pencarian Teks Penuh untuk Pencarian

Hologres mendukung beberapa mode pencarian. Pilih mode yang paling sesuai dengan logika bisnis Anda.

Mode Pencarian

Deskripsi

Keyword Match

Mencocokkan kata kunci dari kueri yang telah ditokenisasi. Mendukung hubungan AND/OR antar kata kunci.

Phrase Search

Mencocokkan frasa eksak. Mengharuskan token berada dalam jarak tertentu.

Natural Language Search

Mendukung kueri fleksibel dan kompleks. Definisikan hubungan AND/OR, istilah wajib/dikecualikan, dan frasa.

Term Search

Menjalankan pencocokan eksak. String kueri harus ada persis di indeks.

Fungsi TEXT_SEARCH

Fungsi TEXT_SEARCH menghitung skor relevansi BM25 untuk kueri terhadap teks sumber.

Sintaksis Fungsi

TEXT_SEARCH (
  <search_data> TEXT/VARCHAR/CHAR
  ,<search_expression> TEXT
  [ ,<mode> TEXT DEFAULT 'match'
  ,<operator> TEXT DEFAULT 'OR'
  ,<tokenizer> TEXT DEFAULT ''
  ,<analyzer_params> TEXT DEFAULT ''
  ,<options> TEXT DEFAULT '']
)

Deskripsi Parameter

Parameter

Wajib

Deskripsi

search_data

Ya

Teks sumber untuk dicari. Mendukung tipe TEXT, VARCHAR, dan CHAR. Harus merupakan kolom dengan indeks teks penuh. Jika tidak, kueri akan gagal.

search_expression

Ya

Teks kueri. Mendukung tipe TEXT, VARCHAR, dan CHAR. Harus berupa konstanta.

mode

Tidak

Mode pencarian. Nilai yang didukung:

  • match (default): Pencocokan kata kunci. Setiap token adalah kata kunci. Gunakan parameter operator untuk mendefinisikan hubungan antar kata kunci. Default adalah OR.

  • phrase: Pencarian frasa. Atur jarak maksimum antar kata menggunakan parameter slop dalam options. Default adalah 0 (kata harus berdekatan).

  • natural_language: Pencarian bahasa alami. Mendukung kondisi kompleks seperti kata kunci AND/OR, istilah wajib/dikecualikan, dan frasa. Untuk detailnya, lihat Tantivy.

  • term: Pencarian istilah. Melakukan pencocokan eksak pada search_expression tanpa tokenisasi atau pemrosesan lainnya.

operator

Tidak

Operator logika antar kata kunci. Hanya berlaku ketika mode adalah match. Nilai yang didukung:

  • OR (default): Mengembalikan hasil jika salah satu kata kunci cocok.

  • AND: Mengembalikan hasil hanya jika semua kata kunci cocok.

tokenizer, analyzer_params

Tidak

Tokenizer dan konfigurasi yang digunakan untuk search_expression. Biasanya tidak diperlukan.

  • Jika tidak ditentukan, menggunakan tokenizer dan konfigurasi yang sama dengan indeks teks penuh pada search_data. Jika search_data adalah konstanta, menggunakan tokenizer jieba default.

  • Jika ditentukan, search_expression ditokenisasi menggunakan tokenizer dan konfigurasi yang diberikan.

options

Tidak

Parameter pencarian tambahan. Format: 'key1=v1;key2=v2;...;keyN=vN;'.

Saat ini hanya mendukung parameter slop, yang hanya berlaku ketika mode adalah phrase. Nilai valid adalah 0 (default) atau bilangan bulat positif. Mendefinisikan jarak maksimum yang diizinkan antar kata dalam frasa.

Catatan

slop mendefinisikan celah maksimum (atau biaya transformasi) antar istilah frasa. Untuk tokenizer seperti jieba, keyword, dan icu, satuannya adalah karakter. Untuk tokenizer seperti standard, simple, dan whitespace, satuannya adalah token.

Nilai Kembalian

Mengembalikan nilai FLOAT non-negatif yang merepresentasikan skor relevansi BM25. Skor yang lebih tinggi menunjukkan relevansi yang lebih tinggi. Skor 0 berarti tidak relevan.

Contoh

  • Gunakan mode pencocokan kata kunci dengan operator AND.

    -- Disarankan: Tentukan nama parameter
    SELECT TEXT_SEARCH (content, 'machine learning', operator => 'AND') FROM tbl;
    
    -- Tanpa nama parameter: Tentukan sesuai urutan
    SELECT TEXT_SEARCH (content, 'machine learning', 'match', 'AND') FROM tbl;
  • Gunakan mode pencarian frasa dengan slop=2.

    SELECT TEXT_SEARCH (content, 'machine learning', 'phrase', options => 'slop=2;') FROM tbl;
  • Gunakan mode pencarian bahasa alami.

    -- Gunakan operator AND/OR untuk mendefinisikan logika
    SELECT TEXT_SEARCH (content, 'machine AND (system OR recognition)', 'natural_language') FROM tbl;
    
     -- Gunakan + (wajib) dan - (dikecualikan) untuk mendefinisikan logika
    SELECT TEXT_SEARCH (content, '+learning -machine system', 'natural_language') FROM tbl;
  • Gunakan mode pencarian istilah.

    SELECT TEXT_SEARCH (content, 'machine learning', 'term') FROM tbl;

Fungsi TOKENIZE

Fungsi TOKENIZE mengembalikan output yang telah ditokenisasi menggunakan konfigurasi tokenizer Anda. Gunakan fungsi ini untuk menguji dan men-debug perilaku tokenisasi.

Sintaksis Fungsi

TOKENIZE (
  <search_data> TEXT
  [ ,<tokenizer> TEXT DEFAULT ''
  ,<analyzer_params> TEXT DEFAULT '']
)

Deskripsi Parameter

  • search_data: Wajib. Teks yang akan ditokenisasi. Mendukung konstanta.

  • tokenizer, analyzer_params: Opsional. Tokenizer dan konfigurasi yang digunakan untuk search_data. Default ke jieba.

Nilai Kembalian

Mengembalikan array TEXT yang berisi token yang telah ditokenisasi.

Verifikasi Penggunaan Indeks

Periksa rencana eksekusi untuk memastikan apakah SQL menggunakan indeks terbalik pencarian teks penuh. Jika menampilkan Fulltext Filter, berarti indeks digunakan. Untuk detail rencana eksekusi, lihat EXPLAIN dan EXPLAIN ANALYZE.

Contoh SQL:

EXPLAIN ANALYZE SELECT * FROM wiki_articles WHERE text_search(content, 'Yangtze River') > 0;

Rencana eksekusi muncul di bawah ini. Kehadiran Fulltext Filter mengonfirmasi penggunaan indeks berhasil.

QUERY PLAN
Gather  (cost=0.00..1.00 rows=1 width=12)
  ->  Local Gather  (cost=0.00..1.00 rows=1 width=12)
        ->  Index Scan using Clustering_index on wiki_articles  (cost=0.00..1.00 rows=1 width=12)
              Fulltext Filter: (text_search(content, search_expression => 'Yangtze River'::text, mode => match, operator => OR, tokenizer => jieba, analyzer_params => {"filter":["removepunct","lowercase",{"stop_words":["_english_"],"type":"stop"},{"language":"english","type":"stemmer"}],"tokenizer":{"hmm":true,"mode":"search","type":"jieba"}}, options => ) > '0'::double precision)
Query Queue: init_warehouse.default_queue
Optimizer: HQO version 4.0.0

Contoh

Persiapan Data

Jalankan SQL berikut untuk membuat tabel uji dan memasukkan data sampel.

-- Buat tabel
CREATE TABLE wiki_articles (id int, content text);

-- Buat indeks
CREATE INDEX ft_idx_1 ON wiki_articles
       USING FULLTEXT (content)
       WITH (tokenizer = 'jieba');

-- Masukkan data
INSERT INTO wiki_articles VALUES
  (1, 'The Yangtze River is China''s longest river and the world''s third-longest river, about 6,300 km long.'),
  (2, 'Li was born in 1962 in Wendeng County, Shandong.'),
  (3, 'He graduated from the department of physics at Shandong University.'),
  (4, 'The Spring Festival, also known as the Lunar New Year, is China''s most important traditional festival.'),
  (5, 'The Spring Festival usually falls between late January and mid-February on the Gregorian calendar. Major customs include pasting spring couplets, setting off firecrackers, eating reunion dinner, and giving New Year greetings.'),
  (6, 'In 2006, the Spring Festival was approved by the State Council as part of China''s first batch of national intangible cultural heritage.'),
  (7, 'Shandong has dozens of universities.'),
  (8, 'ShanDa is a famous university in Shandong.');

-- Jalankan compaction
VACUUM wiki_articles;

-- Kueri data tabel
SELECT * FROM wiki_articles limit 1;

Output contoh:

id |                       content                       
---+---------------------------------------------------
 1 | The Yangtze River is China''s longest river and the world''s third-longest river, about 6,300 km long.

Contoh Pencarian Berbeda

  • Pencocokan kata kunci.

    -- (K1) Pencocokan kata kunci (operator default=OR): Mencocokkan dokumen yang berisi ''shandong'' atau ''university''.
    SELECT * FROM wiki_articles WHERE TEXT_SEARCH(content, 'shandong university') > 0;
    
    -- Hasil
     id |                               content                               
    ----+---------------------------------------------------------------------
      2 | Li was born in 1962 in Wendeng County, Shandong.
      3 | He graduated from the department of physics at Shandong University.
      7 | Shandong has dozens of universities.
      8 | ShanDa is a famous university in Shandong.
    
    -- (K2) Pencocokan kata kunci (operator=AND): Hanya mencocokkan dokumen yang berisi ''shandong'' dan ''university''.
    SELECT * FROM wiki_articles WHERE TEXT_SEARCH(content, 'shandong university', operator => 'AND') > 0;
    
    -- Hasil
     id |                               content                               
    ----+---------------------------------------------------------------------
      3 | He graduated from the department of physics at Shandong University.
      7 | Shandong has dozens of universities.
      8 | ShanDa is a famous university in Shandong.
  • Pencarian frasa.

    -- (P1) Pencarian frasa (slop default = 0): Hanya mencocokkan ketika ''shandong'' diikuti langsung oleh ''university''.
    SELECT * FROM wiki_articles WHERE TEXT_SEARCH(content, 'shandong university', mode => 'phrase') > 0;
    
    -- Hasil
     id |                               content                               
    ----+---------------------------------------------------------------------
      3 | He graduated from the department of physics at Shandong University.
    (1 row)
    
    -- (P2) Pencarian frasa dengan slop = 14: Mencocokkan ketika ''shandong'' dan ''university'' berjarak hingga 14 karakter. Mencocokkan ''Shandong has dozens of universities.''.
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, 'shandong university', mode => 'phrase', options => 'slop=14;') > 0;
            
    -- Hasil
     id |                               content                               
    ----+---------------------------------------------------------------------
      3 | He graduated from the department of physics at Shandong University.
      7 | Shandong has dozens of universities.
    (2 rows)
    
    -- (P3) Pencarian frasa mendukung frasa yang tidak berurutan, tetapi perhitungan slop berbeda. Jadi ''university of Shandong'' cocok dengan slop=23, tetapi tidak dengan slop=22.
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, 'shandong university', mode => 'phrase', options => 'slop=23;') > 0;
            
    -- Hasil   
     id |                               content                               
    ----+---------------------------------------------------------------------
      3 | He graduated from the department of physics at Shandong University.
      7 | Shandong has dozens of universities.
      8 | ShanDa is a famous university in Shandong.
    (3 rows)
    
    -- (P4) Perilaku dengan tokenizer standard. (ALTER INDEX ft_idx_1 SET (tokenizer = 'standard');)
    -- Untuk tokenizer standard, slop diukur dalam token, bukan karakter. Nol token antar kata dihitung sebagai pencocokan frasa, terlepas dari spasi.
    SELECT * FROM wiki_articles WHERE TEXT_SEARCH(content, 'shandong university', mode => 'phrase') > 0;
    
    -- Hasil
     id |        content         
    ----+------------------------
      1 | shandong university
      2 | shandong  university
      3 | shandong   university
      4 | shandong    university
    (4 rows)
    
    -- (P5) Tanda baca diabaikan. (Menggunakan tokenizer jieba.)
    -- Meskipun teks menggunakan koma antara ''river'' dan ''length'', dan kueri menggunakan titik, tetap cocok.
    SELECT * FROM wiki_articles WHERE TEXT_SEARCH(content, 'river. length', mode => 'phrase') > 0;
    
    -- Hasil
     id |                       content                       
    ----+-----------------------------------------------------
      1 | The Yangtze River is China''s longest river and the world''s third-longest river, about 6,300 km long.
    (1 row)
  • Kueri bahasa alami.

    -- (N1) Kueri bahasa alami: Tidak ada operator default ke pencocokan kata kunci. Setara dengan (K1).
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, 'shandong university', 'natural_language') > 0;
     id |                               content                               
    ----+---------------------------------------------------------------------
      7 | Shandong has dozens of universities.
      2 | Li was born in 1962 in Wendeng County, Shandong.
      3 | He graduated from the department of physics at Shandong University.
      8 | ShanDa is a famous university in Shandong.
    
    -- (N2) Kueri bahasa alami: Pencocokan kata kunci yang mengharuskan ('shandong' AND 'university') ATAU 'culture'. AND memiliki prioritas lebih tinggi daripada OR.
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, '(shandong AND university) OR culture', 'natural_language') > 0;
    -- Setara dengan
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, 'shandong AND university OR culture', 'natural_language') > 0;
    -- Setara dengan
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, '(+shandong +university) culture', 'natural_language') > 0;
    
    -- Hasil
     id |                               content                               
    ----+---------------------------------------------------------------------
      8 | ShanDa is a famous university in Shandong.
      7 | Shandong has dozens of universities.
      3 | He graduated from the department of physics at Shandong University.
      6 | In 2006, the Spring Festival was approved by the State Council as part of China's first batch of national intangible cultural heritage.
    
    -- (N3) Kueri bahasa alami: Harus berisi 'shandong', tidak boleh berisi 'university', dan boleh berisi 'culture'. Kata kunci 'culture' tidak memengaruhi baris mana yang cocok, tetapi meningkatkan skor relevansi untuk baris yang cocok.
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, '+shandong -university culture', 'natural_language') > 0;
     id |                     content                      
    ----+--------------------------------------------------
      2 | Li was born in 1962 in Wendeng County, Shandong.
    
    -- Harus berisi 'shandong', tidak boleh berisi 'physics', dan boleh berisi 'famous'. Baris dengan 'famous' mendapatkan skor relevansi lebih tinggi.
    -- Catatan: Hasil skor ini untuk satu shard. Skor dapat bervariasi di berbagai shard atau tata letak file.
    SELECT id,
           content,
           TEXT_SEARCH(content, '+shandong -physics famous', 'natural_language') as score
    FROM wiki_articles
    WHERE TEXT_SEARCH(content, '+shandong -physics famous', 'natural_language') > 0
    ORDER BY score DESC;
    
    -- Hasil
     id |                     content                      |  score   
    ----+--------------------------------------------------+----------
      8 | ShanDa is a famous university in Shandong.       |  2.92376
      7 | Shandong has dozens of universities.             | 0.863399
      2 | Li was born in 1962 in Wendeng County, Shandong. | 0.716338
    
    -- (N4) Kueri bahasa alami: Pencarian frasa, setara dengan (P1). Sertakan frasa dalam tanda kutip ganda. Escape tanda kutip internal dengan \.
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, '"shandong university"', 'natural_language') > 0;
            
    -- Hasil
     id |                               content                               
    ----+---------------------------------------------------------------------
      3 | He graduated from the department of physics at Shandong University.
    
    -- (N5) Kueri bahasa alami: Pencarian frasa dengan slop, setara dengan (P2). Gunakan sintaks ~.
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, '"shandong university"~23', 'natural_language') > 0;
            
    -- Hasil
     id |                               content                               
    ----+---------------------------------------------------------------------
      8 | ShanDa is a famous university in Shandong.
      7 | Shandong has dozens of universities.
      3 | He graduated from the department of physics at Shandong University.
    
    -- (N6) Kueri bahasa alami: Cocokkan semua dokumen.
    SELECT * FROM wiki_articles                                                                                  
            WHERE TEXT_SEARCH(content, '*', 'natural_language') > 0;
            
    -- Hasil
     id |                                           content                                            
    ----+----------------------------------------------------------------------------------------------
      1 | The Yangtze River is China's longest river and the world's third-longest river, about 6,300 km long.
      2 | Li was born in 1962 in Wendeng County, Shandong.
      3 | He graduated from the department of physics at Shandong University.
      4 | The Spring Festival, also known as the Lunar New Year, is China's most important traditional festival.
      5 | The Spring Festival usually falls between late January and mid-February on the Gregorian calendar. Major customs include pasting spring couplets, setting off firecrackers, eating reunion dinner, and giving New Year greetings.
      6 | In 2006, the Spring Festival was approved by the State Council as part of China's first batch of national intangible cultural heritage.
      7 | Shandong has dozens of universities.
      8 | ShanDa is a famous university in Shandong.
  • Kueri istilah.

    -- (T1) Kueri istilah: Secara eksplisit berisi ''Spring Festival'', jadi cocok.
    SELECT * FROM wiki_articles 
             WHERE TEXT_SEARCH(content, 'Spring Festival', 'term') > 0;
    
    -- Hasil         
     id |                                           content                                            
    ----+----------------------------------------------------------------------------------------------
      4 | The Spring Festival, also known as the Lunar New Year, is China''s most important traditional festival.
      5 | The Spring Festival usually falls between late January and mid-February on the Gregorian calendar. Major customs include pasting spring couplets, setting off firecrackers, eating reunion dinner, and giving New Year greetings.
      6 | In 2006, the Spring Festival was approved by the State Council as part of China''s first batch of national intangible cultural heritage.
    
    
    -- (T2) Kueri istilah: Gagal mencocokkan.
    -- Karena kolom wiki_articles.content menggunakan tokenizer jieba secara default, ''shandong university'' dibagi.
    -- Kami menyarankan memasangkan kueri istilah dengan tokenizer keyword untuk pencocokan eksak.
    SELECT * FROM wiki_articles 
             WHERE TEXT_SEARCH(content, 'shandong university', 'term') > 0;
    
    -- Hasil         
     id | content 
    ----+---------

Contoh Kueri Kompleks

  • Anda dapat melakukan kueri gabungan dengan PK.

    -- Temukan teks yang berisi ''shandong'' atau ''university'', dan dengan id=3.
    SELECT * FROM wiki_articles WHERE TEXT_SEARCH(content, 'shandong university') > 0 and id = 3;
    
    -- Hasil
     id |                               content                               
    ----+---------------------------------------------------------------------
      3 | He graduated from the department of physics at Shandong University.
      
    
    -- Temukan teks yang berisi ''shandong'' atau ''university'', atau dengan id<2.
    SELECT * FROM wiki_articles WHERE TEXT_SEARCH(content, 'shandong university') > 0 OR id < 2;
    
    -- Hasil
     id |                               content                               
    ----+---------------------------------------------------------------------
      2 | Li was born in 1962 in Wendeng County, Shandong.
      8 | ShanDa is a famous university in Shandong.
      1 | The Yangtze River is China''s longest river and the world''s third-longest river, about 6,300 km long.
      3 | He graduated from the department of physics at Shandong University.
      7 | Shandong has dozens of universities.
  • Kembalikan skor dan dapatkan 3 teratas.

    SELECT id,
           content,
           TEXT_SEARCH(content, 'shandong university') AS score,
           TOKENIZE(content, 'jieba')
      FROM wiki_articles
    ORDER BY score DESC
    LIMIT 3;
    
    -- Hasil
    id  |                               content                               |  score  |                     tokenize                     
    ----+---------------------------------------------------------------------+---------+--------------------------------------------------
      8 | ShanDa is a famous university in Shandong.                          | 2.74634 | {shanda,famous,univers,shandong}
      7 | Shandong has dozens of universities.                                | 2.74634 | {shandong,has,dozen,univers}
      3 | He graduated from the department of physics at Shandong University. | 2.38178 | {he,graduat,from,depart,physic,shandong,univers}
  • Gunakan TEXT_SEARCH di klausa SELECT dan WHERE.

    SELECT id,
           content,
           TEXT_SEARCH(content, 'shandong university') AS score,
           TOKENIZE(content, 'jieba')
      FROM wiki_articles
     WHERE TEXT_SEARCH(content, 'shandong university') > 0
    ORDER BY score DESC;
    
    -- Hasil
    id  |                               content                               |  score  |                     tokenize                     
    ----+---------------------------------------------------------------------+---------+--------------------------------------------------
      7 | Shandong has dozens of universities.                                | 2.74634 | {shandong,has,dozen,univers}
      8 | ShanDa is a famous university in Shandong.                          | 2.74634 | {shanda,famous,univers,shandong}
      3 | He graduated from the department of physics at Shandong University. | 2.38178 | {he,graduat,from,depart,physic,shandong,univers}
      2 | Li was born in 1962 in Wendeng County, Shandong.                    | 1.09244 | {li,born,1962,wendeng,counti,shandong}
  • Temukan dokumen paling relevan tentang ''shandong university'' dari sumber wiki.

    -- Tabel sumber untuk JOIN.
    CREATE TABLE article_source (id int primary key, source text);
    INSERT INTO article_source VALUES (1, 'baike'), (2, 'wiki'), (3, 'wiki'), (4, 'baike'),
                                      (5, 'baike'), (6, 'baike'), (7, 'wiki'), (8, 'paper'),
                                      (9, 'http_log'), (10, 'http_log'), (11, 'http_log');
                                      
    SELECT a.id,
           source, content,
           TEXT_SEARCH(content, 'shandong university') AS score,
           TOKENIZE(a.content, 'jieba')
      FROM wiki_articles a
      JOIN article_source b
        ON (a.id = b.id)
     WHERE TEXT_SEARCH(a.content, 'shandong university') > 0
       AND b.source = 'wiki'
    ORDER BY score DESC;
    
    -- Hasil
    id  | source |                               content                               |  score  |                     tokenize                     
    ----+--------+---------------------------------------------------------------------+---------+--------------------------------------------------
      7 | wiki   | Shandong has dozens of universities.                                | 2.74634 | {shandong,has,dozen,univers}
      3 | wiki   | He graduated from the department of physics at Shandong University. | 2.38178 | {he,graduat,from,depart,physic,shandong,univers}
      2 | wiki   | Li was born in 1962 in Wendeng County, Shandong.                    | 1.09244 | {li,born,1962,wendeng,counti,shandong}

Praktik Terbaik

Bangun Ulang Indeks Menggunakan Resource Serverless

Memodifikasi properti tabel dapat memicu compaction dan pembangunan ulang indeks, yang mengakibatkan konsumsi CPU tinggi. Untuk memodifikasi properti tabel berikut, lakukan langkah-langkah berikut:

  • Perubahan pada bitmap_columns, dictionary_encoding_columns, atau indeks vektor memicu compaction dan pengindeksan ulang. Kami menyarankan untuk menghindari sintaksis ALTER TABLE xxx SET untuk perubahan ini. Sebagai gantinya, gunakan sintaksis REBUILD dengan resource Serverless Computing. Untuk informasi lebih lanjut, lihat REBUILD.

ASYNC REBUILD TABLE <table_name> 
WITH (
    rebuild_guc_hg_computing_resource = 'serverless'
)
SET (
    bitmap_columns = '<col1>,<col2>',
    dictionary_encoding_columns = '<col1>:on,<col2>:off',
    vectors = '{
    "<col_vector>": {
        "algorithm": "HGraph",
        "distance_method": "Cosine",
        "builder_params": {
            "base_quantization_type": "rabitq",
            "graph_storage_type": "compressed",
            "max_degree": 64,
            "ef_construction": 400,
            "precise_quantization_type": "fp32",
            "use_reorder": true,
            "max_total_size_to_merge_mb" : 4096
        }
    }
    }'
);
  • Memodifikasi penyimpanan berorientasi kolom untuk data berformat JSON atau kolom indeks teks penuh juga memicu compaction dan pembangunan ulang indeks. Sintaksis REBUILD belum didukung untuk modifikasi ini. Sebagai gantinya, buat tabel sementara sebagai berikut:

BEGIN ;
-- Bersihkan tabel sementara yang mungkin ada
DROP TABLE IF EXISTS <table_new>;
-- Buat tabel sementara
SET hg_experimental_enable_create_table_like_properties=on;
CALL HG_CREATE_TABLE_LIKE ('<table_new>', 'select * from <table>');
COMMIT ;

-- Aktifkan penyimpanan berorientasi kolom untuk data berformat JSON untuk kolom yang sesuai
ALTER TABLE <table_new> ALTER COLUMN <column_name> SET (enable_columnar_type = ON);
-- Buat indeks teks penuh untuk kolom yang sesuai
CREATE INDEX <idx_name> ON <table_new> USING FULLTEXT (column_name);

-- Masukkan data ke tabel sementara, jalankan menggunakan resource Serverless, dan selesaikan pembangunan indeks secara sinkron
SET hg_computing_resource = 'serverless';
INSERT INTO <table_new> SELECT * FROM <table>;
ANALYZE <table_new>;

BEGIN ;
-- Hapus tabel lama
DROP TABLE IF EXISTS  <table>;
-- Ubah nama tabel sementara
ALTER TABLE <table_new> RENAME TO <table>;
COMMIT ;
  • Untuk modifikasi properti lainnya—seperti `distribution_key`, `clustering_key`, `segment_key`, dan format penyimpanan—gunakan sintaksis REBUILD dengan resource Serverless Computing.

Lanjutan: Menyesuaikan Konfigurasi Tokenizer

Hologres merekomendasikan penggunaan konfigurasi tokenizer default. Namun, Anda mungkin perlu menyesuaikannya untuk kebutuhan bisnis tertentu.

Persyaratan analyzer_params

Persyaratan untuk konfigurasi analyzer_params:

  • Harus berupa string JSON.

  • Kunci tingkat atas adalah tokenizer dan filter:

    • filter: Opsional. Array JSON dari konfigurasi filter. Filter diterapkan pada setiap token secara berurutan.

    • tokenizer: Wajib. Objek JSON dari pengaturan tokenizer. Kunci yang didukung meliputi:

      • type: Wajib. Nama tokenizer.

      • Parameter spesifik tokenizer lainnya. Lihat tabel di bawah untuk detailnya.

        Tokenizer

        Parameter lain dari objek tokenizer

        Deskripsi parameter

        Nilai

        jieba

        mode

        Menentukan mode tokenisasi.

        • search (default): Mencantumkan semua kombinasi yang mungkin selama tokenisasi, memungkinkan redundansi. Misalnya, istilah Bahasa Tionghoa "traditional festival" ditokenisasi menjadi "tradition", "festival", dan "traditional festival", menghasilkan tiga token.

        • exact: Melakukan tokenisasi non-redundan. Misalnya, istilah Bahasa Tionghoa "traditional festival" ditokenisasi menjadi hanya satu token: "traditional festival".

        hmm

        Menentukan apakah akan menggunakan Model Markov Tersembunyi (HMM) untuk mendeteksi kata di luar kamus (OOV). Ini meningkatkan kemampuan mengenali kata baru.

        • true (default): gunakan

        • false: Nilai ini tidak digunakan.

        standard

        max_token_length

        Panjang maksimum token.

        Bilangan bulat positif. Nilai default adalah 255. Jika token melebihi panjang ini, akan dibagi pada interval max_token_length.

        ik

        mode

        Menentukan mode tokenisasi.

        • ik_max_word (default): Tokenisasi tingkat halus. Menghasilkan semua kata pendek yang mungkin. Misalnya, istilah Bahasa Tionghoa "Nanjing City" ditokenisasi menjadi "Nanjing" dan "city".

        • ik_smart: Tokenisasi tingkat kasar. Mengutamakan kata yang lebih panjang untuk mengurangi jumlah pemisahan. Token output tidak tumpang tindih. Berusaha menggabungkan angka dan kuantifier menjadi satu token. Misalnya, "Nanjing City" dan "1 kilometer" tidak ditokenisasi lebih lanjut.

        enable_lowercase

        Menentukan apakah akan mengonversi token menjadi huruf kecil.

        • true (default)

        • false

        ngram

        min_ngram

        Panjang karakter minimum token.

        Nilai default adalah 1. Harus berupa bilangan positif. Selisih maksimum antara min_ngram dan max_ngram adalah 3.

        Catatan: Anda dapat menyesuaikan selisih maksimum dengan mengatur parameter Konfigurasi Grand Unified (GUC) berikut. Contoh: SET hg_fulltext_index_max_ngram_diff = 5

        max_ngram

        Panjang karakter maksimum token.

        Nilai default adalah 2. Rentang nilai [1, 255]. Selisih maksimum antara max_ngram dan min_ngram adalah 3.

        Catatan

        Jika selisih antara max_ngram dan min_ngram terlalu besar, tokenizer ngram menghasilkan banyak token. Hal ini dapat menyebabkan peningkatan konsumsi resource, penyimpanan indeks yang lebih besar, dan waktu pembuatan indeks yang lebih lama.

        prefix_only

        Menentukan apakah hanya mempertimbangkan awalan.

        • true

        • false (default)

        pinyin

        keep_first_letter

        Menentukan apakah akan menyimpan huruf awal setiap karakter Tionghoa.

        • true (default): Menyimpan huruf awal. Misalnya, Pinyin untuk "Lǐ Míng" ditokenisasi untuk menyertakan "lm".

        • false: Item tidak disimpan.

        keep_separate_first_letter

        Menentukan apakah akan menyimpan huruf awal setiap karakter Tionghoa.

        • true: Menyimpan huruf awal sebagai token terpisah. Misalnya, Pinyin untuk "Lǐ Míng" ditokenisasi untuk menyertakan "l" dan "m".

        • false (default): Sistem tidak menyimpan item tersebut.

        limit_first_letter_length

        Panjang maksimum token yang terdiri dari huruf awal.

        Panjang maksimum string huruf awal. Nilainya berupa bilangan bulat. Nilai default adalah 16.

        keep_full_pinyin

        Menentukan apakah akan menyimpan Pinyin lengkap setiap karakter Tionghoa.

        • true (default): Menyimpan Pinyin lengkap. Misalnya, Pinyin untuk "Lǐ Míng" ditokenisasi untuk menyertakan "li" dan "ming".

        • false: Penyimpanan dinonaktifkan.

        keep_joined_full_pinyin

        Menentukan apakah akan menggabungkan Pinyin lengkap setiap karakter Tionghoa.

        • Jika true, suku kata pinyin digabung. Misalnya, hasil tokenisasi untuk "李明" menyertakan "liming".

        • false (nilai bawaan): Koneksi tidak dibuat.

        keep_none_chinese

        Menentukan apakah akan menyimpan huruf atau angka non-Tionghoa dalam hasil.

        • true (default): Menyimpannya.

        • false: Tidak menyimpannya.

        keep_none_chinese_together

        Menentukan apakah akan menyimpan huruf atau angka non-Tionghoa yang berurutan bersama sebagai satu token.

        • true (default): Menyimpannya bersama. Misalnya, "DJ李明" ditokenisasi untuk menyertakan "DJ", "li", dan "ming", di mana "DJ" adalah satu token.

        • false: Tidak menyimpannya bersama. Misalnya, "DJ李明" ditokenisasi untuk menyertakan "D", "J", "li", dan "ming".

        Catatan

        Parameter ini hanya berlaku ketika keep_none_chinese diatur ke true.

        keep_none_chinese_in_first_letter

        Menentukan apakah akan menyimpan huruf atau angka non-Tionghoa dalam token yang terdiri dari huruf awal.

        • true (default): Menyimpannya. Misalnya, "李明AT2025" ditokenisasi untuk menyertakan "lmat2025".

        • false: Tidak menyimpannya.

        keep_none_chinese_in_joined_full_pinyin

        Menentukan apakah akan menyimpan huruf atau angka non-Tionghoa dalam token yang terdiri dari Pinyin lengkap yang digabung.

        • true: Menyimpannya. Misalnya, "李明AT2025" ditokenisasi untuk menyertakan "limingat2025".

        • false (default): Tidak menyimpannya.

        none_chinese_pinyin_tokenize

        Jika urutan huruf non-Tionghoa merupakan suku kata Pinyin yang valid, tentukan apakah akan membaginya menjadi istilah Pinyin terpisah.

        • true (default): Membagi urutan tersebut. Misalnya, "limingalibaba2025" ditokenisasi untuk menyertakan "li", "ming", "a", "li", "ba", "ba", dan "2025".

        • false: Tidak membagi urutan tersebut.

        Catatan

        Parameter ini hanya berlaku ketika keep_none_chinese dan keep_none_chinese_together diatur ke true.

        keep_original

        Menentukan apakah akan menyimpan input asli.

        • true: Menyimpan input asli.

        • false (default): Tidak menyimpan input asli.

        lowercase

        Menentukan apakah akan mengonversi huruf non-Tionghoa menjadi huruf kecil.

        • true (default)

        • false

        trim_whitespace

        Menentukan apakah akan menghapus karakter spasi.

        • true (default)

        • false

        remove_duplicated_term

        Menentukan apakah akan menghapus istilah duplikat.

        • true: Menghapus istilah duplikat. Misalnya, "de的" ditokenisasi menjadi "de". Namun, hal ini dapat memengaruhi hasil kueri frasa untuk "de的".

        • false (default): Tidak menghapus istilah duplikat.

        keep_separate_chinese

        Menentukan apakah akan menyimpan karakter Tionghoa individual sebagai token terpisah.

        • true: Menyimpan karakter individual. Misalnya, "李明" ditokenisasi untuk menyertakan "李" dan "明" sebagai dua token terpisah.

        • false (default): Nilai tidak disimpan.

Default analyzer_params

analyzer_params default untuk setiap tokenizer:

Nama Tokenizer

Parameter bawaan alat analisis

Contoh Tokenisasi

jieba (tokenizer default)

{
  "tokenizer": {
    "type": "jieba", 
    "mode": "search",
    "hmm": true
  }, 
  "filter": [
    "removepunct",
    "lowercase",
    {"type": "stop", "stop_words": ["_english_"]},
    {"type": "stemmer", "language": "english"}
  ]
}
 Spring
 Festival
 ,
 i.e.,
 Lunar
 New
 Year
 ,
 is
 China's
 most
 important
 traditional
 festival
 traditional
 festival
 .

whitespace

{
  "tokenizer": {
    "type": "whitespace"
  }
}
The Spring Festival, also known as the Lunar New Year, is China's most important traditional festival.

keyword

{
  "tokenizer": {
    "type": "keyword"
  }
}
The Spring Festival, also known as the Lunar New Year, is China's most important traditional festival.

simple

{
  "tokenizer": {
    "type": "simple"
  }, 
  "filter": [
    "lowercase"
  ]
}
Spring
Festival
i.e.,
Lunar
New
Year
is
China's
most
important
traditional
festival

standard

{
  "tokenizer": {
    "type": "standard",
    "max_token_length": 255
  }, 
  "filter": [
    "lowercase"
  ]
}
Spring Festival
also known as
Lunar New Year
is
the most important
traditional festival
in China

icu

{
  "tokenizer": {
    "type": "icu"
  }, 
  "filter": [
    "removepunct",
    "lowercase"
  ]
}
Spring
Festival
,
i.e.,
Lunar
New
Year
,
is
China's
most
important
traditional
festival
.

ik

{
  "tokenizer": {
    "type": "ik",
    "mode": "ik_max_word",
    "enable_lowercase": true
  },
  "filter": [
    {"type": "stop", "stop_words": ["_english_"]},
    {"type": "stemmer", "language": "english"}
  ]
}
Spring
Festival
i.e.
Lunar
New
Year
is
China's
most
important
traditional
festival
traditional
festival

ngram

{
  "tokenizer": {
    "type": "ngram",
    "min_gram": 1,
    "max_gram": 2,
    "prefix_only": false
  }
}
Spring Festival, also known as the Lunar New Year, is the most important traditional festival in China.

pinyin

{
  "tokenizer": {
    "type": "pinyin",
    "keep_first_letter": true,
    "keep_separate_first_letter": false,
    "keep_full_pinyin": true,
    "keep_joined_full_pinyin": false,
    "keep_none_chinese": true,
    "keep_none_chinese_together": true,
    "none_chinese_pinyin_tokenize": true,
    "keep_original": false,
    "limit_first_letter_length": 16,
    "lowercase": true,
    "trim_whitespace": true,
    "keep_none_chinese_in_first_letter": true,
    "keep_none_chinese_in_joined_full_pinyin": false,
    "remove_duplicated_term": false,
    "ignore_pinyin_offset": true,
    "fixed_pinyin_offset": false,
    "keep_separate_chinese": false
  }
}
chun
cjjnlxnszgzzydct
jie
ji
nong
li
xin
nian
shi
zhong
guo
zui
zhong
yao
de
chuan
tong
jie
ri

Konfigurasi Filter dalam analyzer_params

Hologres mendukung filter berikut dalam analyzer_params.

Catatan

Jika Anda mengonfigurasi beberapa filter, filter tersebut diterapkan pada setiap token secara berurutan.

Nama Properti

Deskripsi

Format parameter

Contoh

lowercase

Mengonversi huruf kapital dalam token menjadi huruf kecil.

Deklarasikan lowercase.

"lowercase"
  • Definisi properti filter token

    "filter": ["lowercase"]
  • Hasil filter

    ["Hello", "WORLD"]->["hello", "world"]

stop

Menghapus token kata berhenti.


stop_words: Daftar kata berhenti. Harus berupa daftar string. Mendukung kata berhenti kustom dan kamus bawaan untuk beberapa bahasa:

"_english_"
"_danish_"
"_dutch_"
"_finnish_"
"_french_"
"_german_"
"_hungarian_"
"_italian_"
"_norwegian_"
"_portuguese_"
"_russian_"
"_spanish_"
"_swedish_"
  • Definisi Properti Filter Token

    "filter": [{
      "type": "stop",
      "stop_words": ["_english_", "cat"]
    }]
  • Hasil filter

    ["the", "cat", "is", "on", "a", "mat"]->["mat"]

    Catatan

    "cat" adalah kata berhenti kustom. "the", "is", "on", dan "a" berasal dari kamus bawaan "_english_".

stemmer

Mengurangi token ke bentuk dasarnya berdasarkan aturan bahasa.

language: Bahasa. Nilai yang didukung:

"arabic",
"danish",
"dutch",
"english",
"finnish",
"french",
"german",
"greek",
"hungarian",
"italian",
"norwegian",
"portuguese",
"romanian",
"russian",
"spanish",
"swedish",
"tamil",
"turkish"
  • Definisi filter

    "filter": [{
      "type": "stemmer",
      "language": "english"
    }]
  • Hasil filtering token

    ["machine", "learning"]->["machin", "learn"]

length

Menghapus token yang lebih panjang dari panjang yang ditentukan.

max: Panjang maksimum yang diizinkan. Harus berupa bilangan bulat positif.

{"type": "length", "max": 10}
  • Definisi Properti Filter Token

    "filter": [{"type": "length", "max": 10}]
  • Hasil filter

    ["AI", "for", "Artificial", "Intelligence"]->["AI", "for", "Artificial"]

removepunct

Menghapus token yang hanya terdiri dari karakter tanda baca.

Deklarasikan removepunct.

"removepunct"
Catatan

Mulai versi 4.0.8, removepunct menambahkan parameter mode. Nilai valid:

  • if_all (default): Menghapus token hanya jika semua karakternya adalah tanda baca.

  • if_any: Menghapus token jika mengandung karakter tanda baca apa pun.

  • Definisi properti filtering token

    "filter": ["removepunct"]
    Catatan

    Setara dengan "filter": [{"type": "removepunct", "mode": "if_all"}].

  • Hasil filter

    ["Chinese", "english", "Chinese。", "english.", "124", "124!=8", "。", "、", ",,", " ..."]->["Chinese", "english", "Chinese。", "english.", "124", "124!=8"]

    "filter": [{"type": "removepunct", "mode": "if_any"}]

    ["Chinese", "english", "Chinese.", "english.", "124", "124!=8", ".", ",", ",,", " ..."] → ["Chinese", "english", "124"]

pinyin

Filter token pinyin.

{
  "type": "pinyin",
  "keep_first_letter": true,
  "keep_separate_first_letter": false,
  "keep_full_pinyin": true,
  "keep_joined_full_pinyin": false,
  "keep_none_chinese": true,
  "keep_none_chinese_together": true,
  "none_chinese_pinyin_tokenize": true,
  "keep_original": false,
  "limit_first_letter_length": 16,
  "lowercase": true,
  "trim_whitespace": true,
  "keep_none_chinese_in_first_letter": true,
  "keep_none_chinese_in_joined_full_pinyin": false,
  "remove_duplicated_term": false,
  "ignore_pinyin_offset": true,
  "fixed_pinyin_offset": false,
  "keep_separate_chinese": false
}

Pengaturan filter sesuai dengan tokenizer pinyin.