全部产品
Search
文档中心

Hologres:Indeks terbalik teks penuh

更新时间:Feb 14, 2026

Hologres V4.0 dan versi selanjutnya mendukung indeks terbalik teks penuh yang dibangun di atas Tantivy, mesin pencarian teks penuh berkinerja tinggi. Fitur ini menyediakan pengambilan data berkinerja tinggi serta mendukung algoritma penskoran kesamaan BM25 untuk pengurutan dokumen, pencarian kata kunci, dan pencarian frasa.

Cara kerja

Saat Anda menulis teks sumber ke Hologres, sistem membangun file indeks terbalik teks penuh untuk setiap file data berdasarkan konfigurasi indeks yang ditentukan. Pertama, tokenizer memecah teks menjadi token. Indeks kemudian mencatat pemetaan antara setiap token dan teks sumber, termasuk informasi seperti posisi dan frekuensi kata kunci.

Untuk melakukan pencarian teks, kueri pencarian terlebih dahulu ditokenisasi menjadi sekumpulan token target. Algoritma BM25 kemudian menghitung skor relevansi setiap teks sumber terhadap token target tersebut, sehingga memungkinkan pencarian teks penuh yang cepat dan akurat.

Catatan

  • Indeks terbalik teks penuh hanya didukung untuk tabel berorientasi kolom dan tabel hibrida baris-kolom di Hologres V4.0 dan versi selanjutnya. Tabel berorientasi baris tidak didukung.

  • Anda hanya dapat membuat indeks terbalik teks penuh pada kolom dengan tipe data TEXT, CHAR, atau VARCHAR.

  • Anda hanya dapat membangun indeks terbalik teks penuh pada satu kolom sekaligus. Setiap kolom hanya mendukung satu indeks terbalik teks penuh. Untuk mengindeks beberapa kolom, Anda harus membuat indeks terpisah untuk masing-masing kolom.

  • Setelah membuat indeks terbalik teks penuh, file indeks untuk data yang sudah ada maupun data baru yang diimpor dibangun secara asinkron selama proses kompaksi data. Sampai file indeks dibangun, skor relevansi BM25 untuk data tersebut bernilai 0.

  • Untuk penulisan data real-time setelah pembuatan indeks terbalik teks penuh: Pada versi sebelum Hologres V4.0.8, indeks dibangun secara sinkron dengan penulisan data real-time. Mulai V4.0.8 dan versi selanjutnya, sistem merefresh indeks real-time di memori secara asinkron setiap detik guna menjaga efisiensi penulisan data dan pembuatan indeks. Data hanya dapat dikueri menggunakan indeks setelah indeks direfresh.

  • Pencarian teks penuh hanya dapat dilakukan pada kolom yang memiliki indeks teks penuh. Pencarian brute-force pada kolom tanpa indeks tidak didukung.

  • Anda dapat menggunakan resource Serverless Computing untuk impor data batch. Resource Serverless menyelesaikan kompaksi dan pembuatan indeks teks penuh secara sinkron selama impor data. Untuk informasi lebih lanjut, lihat Gunakan Serverless Computing untuk tugas baca dan tulis dan Gunakan Serverless Computing untuk tugas kompaksi. Jika tidak menggunakan resource Serverless, Anda harus menjalankan perintah berikut secara manual untuk memicu Kompaksi setelah mengimpor data secara batch atau memodifikasi indeks.

    VACUUM <schema_name>.<table_name>;
  • Algoritma pencarian BM25 menghitung skor relevansi pada tingkat file. Jika Anda mengimpor jumlah data yang kecil, Anda dapat memicu Kompaksi secara manual untuk menggabungkan file dan meningkatkan akurasi pencarian.

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

  • Anda dapat memilih tokenizer sesuai skenario dalam tabel berikut:

    Skenario

    Tokenizer

    Catatan

    Ekstraksi kata kunci dari artikel panjang

    Jieba

    Mendukung penemuan kata baru dan peralihan pola kompleks.

    Pencarian teks deskriptif Bahasa Mandarin

    IK

    Mengidentifikasi istilah Bahasa Mandarin secara akurat.

    Pencarian teks judul Bahasa Inggris

    Simple, Whitespace, Standard

    Sederhana dan efisien. Gunakan sesuai kebutuhan berdasarkan teks Bahasa Inggris target.

    Pencarian kabur untuk teks log

    Ngram

    Tidak memerlukan kamus. Memenuhi kebutuhan kueri teks kabur.

    Pencarian Pinyin untuk nama produk atau orang Tionghoa

    Pinyin

    Mendukung berbagai skenario Pinyin Tionghoa seperti Pinyin lengkap, huruf awal, dan derivasi homofon.

Kelola indeks

Buat indeks

Sintaks

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

Parameter

Parameter

Deskripsi

idx_name

Nama indeks.

table_name

Nama tabel target.

column_name

Nama kolom target untuk membangun indeks terbalik teks penuh.

storage_parameter

Parameter untuk indeks terbalik teks penuh. Terdapat dua jenis parameter:

  • tokenizer: Nama tokenizer. Tokenizer berikut didukung:

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

    • whitespace: Tokenizer yang memisahkan teks berdasarkan spasi.

    • standard: Tokenizer standar berdasarkan Unicode Standard Annex #29.

    • simple: Tokenizer sederhana yang memisahkan teks berdasarkan spasi dan tanda baca.

    • keyword: Tokenizer kata kunci yang tidak melakukan operasi apa pun dan menghasilkan teks asli.

    • icu: Tokenizer untuk pemrosesan teks multibahasa.

    • ik: Tokenizer Bahasa Mandarin berbasis IK Analyzer. Dapat mengidentifikasi secara otomatis format khusus seperti kata Bahasa Inggris, alamat email, URL tanpa `://`, dan alamat IP. Tokenizer ini didukung di Hologres V4.0.9 dan versi selanjutnya.

    • ngram: Tokenizer berbasis jendela geser karakter. Memisahkan teks menjadi n karakter atau kata berurutan, disebut n-gram, untuk meningkatkan tingkat recall dan kemampuan pencocokan kabur sistem pencarian. Tokenizer ini cocok untuk mempercepat skenario pencocokan kabur `like` dan `ilike`. Didukung di Hologres V4.0.9 dan versi selanjutnya.

    • pinyin: Tokenizer Pinyin. Menghasilkan Pinyin untuk karakter dan kata Tionghoa dalam teks serta mendukung pemisahan dan derivasi Pinyin untuk string non-Tionghoa. Ini membantu Anda mencapai generasi Pinyin yang lebih akurat dan tingkat recall pencarian yang lebih tinggi. Tokenizer ini didukung di Hologres V4.0.9 dan versi selanjutnya.

  • analyzer_params: Konfigurasi tokenizer. Hanya string berformat JSON yang didukung.

    • Setiap tokenizer memiliki konfigurasi `analyzer_params` default. Dalam kebanyakan kasus, gunakan konfigurasi default. Artinya, Anda hanya perlu menentukan parameter `tokenizer` dan tidak perlu mengonfigurasi parameter `analyzer_params` secara eksplisit.

    • Anda dapat menyesuaikan beberapa konfigurasi. Untuk informasi lebih lanjut, lihat Operasi lanjutan: Menyesuaikan konfigurasi tokenizer.

Catatan

Hanya satu jenis `tokenizer` dan `analyzer_params` yang dapat diatur dalam indeks yang sama.

Contoh

  • Buat indeks terbalik teks penuh yang menggunakan tokenizer dan konfigurasi default. Tokenizer default adalah tokenizer Jieba.

    CREATE INDEX idx1 ON tbl 
           USING FULLTEXT (col1);
  • Tentukan secara eksplisit tokenizer IK dan gunakan konfigurasi default-nya.

    CREATE INDEX idx1 ON tbl 
           USING FULLTEXT (col1)
           WITH (tokenizer = 'ik');
  • Tentukan secara eksplisit konfigurasi tokenizer kustom yang menggunakan tokenizer Jieba dalam mode `exact` dan hanya filter `lowercase` untuk mengonversi teks menjadi huruf kecil.

    CREATE INDEX idx1 ON tbl 
           USING FULLTEXT (col1)
           WITH (tokenizer = 'jieba',
                 analyzer_params = '{"tokenizer":{"type":"jieba","mode":"exact"}, "filter":["lowercase"]}');
Catatan
  • Setelah membuat indeks terbalik teks penuh, file indeks dibangun selama proses Kompaksi setelah data diimpor.

  • Anda dapat menggunakan resource Serverless Computing untuk impor data batch. Resource Serverless menyelesaikan kompaksi dan pembuatan indeks teks penuh secara sinkron selama impor data. Untuk informasi lebih lanjut, lihat Gunakan Serverless Computing untuk tugas baca dan tulis dan Gunakan Serverless Computing untuk tugas kompaksi.

  • Jika tidak menggunakan resource Serverless, Anda harus menjalankan perintah berikut secara manual untuk memicu Kompaksi setelah mengimpor data secara batch atau memodifikasi indeks. Untuk informasi lebih lanjut, lihat Kompaksi (Beta).

    VACUUM <schema_name>.<table_name>;

Modifikasi indeks

Sintaks

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

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

Parameter

Untuk informasi lebih lanjut tentang parameter, lihat Parameter.

Contoh

Catatan

Setelah memodifikasi indeks terbalik teks penuh, file indeks dibangun ulang secara asinkron selama proses kompaksi data. Anda harus menjalankan perintah VACUUM <schema_name>.<table_name>; secara manual untuk memicu Kompaksi secara sinkron. Untuk informasi lebih lanjut, lihat Kompaksi.

  • Ubah tokenizer indeks menjadi `standard`.

    ALTER INDEX idx1 SET (tokenizer = 'standard');
  • Ubah tokenizer indeks menjadi `ik` dengan mode `ik_max_word`, tanpa mengonversi teks menjadi huruf kecil atau menambahkan filter.

    ALTER INDEX idx1 SET (
      tokenizer = 'ik',
      analyzer_params = '{"tokenizer":{"type":"ik","mode":"ik_max_word","enable_lowercase": false}}'
    );
  • Atur ulang indeks untuk menggunakan tokenizer Jieba default dan konfigurasi `analyzer_params` default-nya.

    ALTER INDEX idx1 RESET (tokenizer);
    ALTER INDEX idx1 RESET (tokenizer, analyzer_params);
  • Atur ulang konfigurasi `analyzer_params` ke nilai default untuk tokenizer saat ini.

    ALTER INDEX idx1 RESET (analyzer_params);

Hapus indeks

Sintaks

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

Parameter

Untuk informasi lebih lanjut tentang parameter, lihat Parameter.

Lihat indeks

Hologres menyediakan tabel sistem hologres.hg_index_properties untuk melihat indeks terbalik teks penuh yang telah dibuat beserta lokasinya.

SELECT * FROM hologres.hg_index_properties;

Anda dapat menjalankan pernyataan SQL berikut untuk melihat tabel dan kolom yang sesuai 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;

Parameter:

  • namespace: Nilai field table_namespace dalam hasil yang dikembalikan oleh perintah SELECT * FROM hologres.hg_index_properties;.

  • indexname: Nama indeks.

Gunakan indeks untuk pencarian teks penuh

Hologres mendukung berbagai mode pencarian yang memungkinkan Anda melakukan pencarian teks penuh secara fleksibel sesuai kebutuhan.

Mode pencarian

Deskripsi

Pencocokan kata kunci

Mencari berdasarkan kata kunci dari kueri pencarian yang telah ditokenisasi. Mendukung pendefinisian hubungan AND/OR antar kata kunci.

Pencarian frasa

Mencari berdasarkan frasa dari kueri pencarian. Pencocokan memerlukan jarak antara beberapa kata memenuhi persyaratan yang ditentukan.

Pencarian bahasa alami

Memungkinkan Anda mendefinisikan kondisi kueri kompleks untuk mencapai tujuan pencarian secara fleksibel, seperti mendefinisikan hubungan AND/OR, kata wajib, kata yang dikecualikan, dan frasa.

Pencarian kata kunci

Menjalankan pencarian tepat untuk kueri pencarian. Pencocokan memerlukan bahwa indeks berisi string kueri yang persis sama.

Fungsi pencarian TEXT_SEARCH

Fungsi `TEXT_SEARCH` menghitung skor relevansi BM25 untuk teks sumber berdasarkan kueri pencarian.

Sintaks 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 '']
)

Parameter

Parameter

Wajib

Deskripsi

search_data

Ya

Sumber pencarian. Parameter ini mendukung tipe data TEXT, VARCHAR, dan CHAR. Hanya input kolom yang didukung, dan kolom tersebut harus memiliki indeks teks penuh. Jika tidak, akan muncul error.

search_expression

Ya

Objek pencarian. Parameter ini mendukung tipe data TEXT, VARCHAR, dan CHAR. Hanya konstanta yang didukung.

mode

Tidak

Mode pencarian. Mode berikut didukung:

  • match (default): Pencocokan kata kunci. Setiap token adalah kata kunci. Hubungan antara beberapa kata kunci diatur oleh parameter operator, yang default-nya OR.

  • phrase: Pencarian frasa. Jarak antar kata dalam frasa dikonfigurasi dengan menentukan slop dalam parameter options. Nilai default adalah 0, yang berarti kata-kata dalam frasa harus berdekatan.

  • natural_language: Pencarian bahasa alami. Gunakan bahasa alami untuk mengekspresikan kondisi kueri kompleks, seperti kata kunci AND/OR, kata wajib, kata yang dikecualikan, dan frasa. Untuk informasi lebih lanjut, lihat Tantivy.

  • term: Pencarian kata kunci. Tidak ada tokenisasi atau pemrosesan lain pada search_expression. Fungsi melakukan pencocokan tepat dalam indeks.

operator

Tidak

Operator logika antar kata kunci. Parameter ini hanya berlaku ketika mode diatur ke `match`. Nilai berikut didukung:

  • OR (default): Jika kueri pencarian memiliki beberapa token, pencocokan dikembalikan jika salah satu token cocok.

  • AND: Jika kueri pencarian memiliki beberapa token, pencocokan dikembalikan hanya jika semua token cocok.

tokenizer, analyzer_params

Tidak

Tokenizer dan konfigurasi yang digunakan untuk kueri pencarian search_expression. Biasanya Anda tidak perlu mengonfigurasi parameter ini.

  • Jika tidak ditentukan, tokenizer dan konfigurasi yang sama dengan indeks terbalik teks penuh pada kolom sumber search_data digunakan secara default. Jika sumbernya adalah konstanta, tokenizer Jieba default digunakan.

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

options

Tidak

Parameter lain untuk indeks teks penuh. Tentukan parameter ini dalam format 'key1=v1;key2=v2;...;keyN=vN;'.

Saat ini, hanya parameter slop yang didukung. Parameter ini hanya berlaku ketika mode diatur ke phrase. Anda dapat mengatur slop ke 0 (default) atau bilangan bulat positif. Nilai ini menentukan jarak maksimum yang diizinkan antara istilah dalam frasa.

Catatan

Nilai slop menentukan celah maksimum yang diizinkan—atau overhead transformasi—antara istilah dalam frasa. Untuk tokenizer seperti jieba, keyword, dan icu, celah diukur dalam karakter, bukan token. Untuk tokenizer seperti standard, simple, dan whitespace, celah diukur dalam token.

Nilai kembalian

Fungsi ini mengembalikan nilai FLOAT non-negatif yang merepresentasikan skor relevansi BM25 antara teks sumber dan kueri pencarian. Skor yang lebih tinggi menunjukkan relevansi yang lebih tinggi. Skor 0 menunjukkan bahwa teks sama sekali tidak relevan.

Contoh

  • Gunakan mode pencocokan kata kunci dan ubah operator menjadi AND.

    -- Tentukan nama parameter.
    SELECT TEXT_SEARCH (content, 'machine learning', operator => 'AND') FROM tbl;
    
    -- Jangan tentukan nama parameter. Anda harus menentukan parameter sesuai urutan.
    SELECT TEXT_SEARCH (content, 'machine learning', 'match', 'AND') FROM tbl;
  • Gunakan mode pencarian frasa dan atur slop ke 2.

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

    -- Definisikan logika pencarian token menggunakan operator AND dan OR.
    SELECT TEXT_SEARCH (content, 'machine AND (system OR recognition)', 'natural_language') FROM tbl;
    
     -- Definisikan logika pencarian token menggunakan + (harus termasuk) dan - (harus dikecualikan).
    SELECT TEXT_SEARCH (content, '+learning -machine system', 'natural_language') FROM tbl;
  • Gunakan mode pencarian kata kunci.

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

Fungsi TOKENIZE

Fungsi `TOKENIZE` menghasilkan hasil tokenisasi berdasarkan konfigurasi tokenizer. Anda dapat menggunakannya untuk men-debug efek tokenisasi indeks terbalik teks penuh.

Sintaks fungsi

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

Parameter

  • search_data: Wajib. Teks target untuk tokenisasi. Hanya input konstanta yang didukung.

  • tokenizer, analyzer_params: Opsional. Tokenizer dan konfigurasi yang digunakan untuk teks target search_data. Default-nya adalah tokenizer Jieba.

Nilai kembalian

Fungsi ini mengembalikan array TEXT yang berisi kumpulan token dari teks target.

Verifikasi penggunaan indeks

Anda dapat menggunakan rencana eksekusi untuk menentukan apakah pernyataan SQL menggunakan indeks terbalik teks penuh. Jika rencana eksekusi mencakup Fulltext Filter, maka indeks terbalik teks penuh digunakan. Untuk informasi lebih lanjut tentang rencana eksekusi, lihat EXPLAIN dan EXPLAIN ANALYZE.

Contoh pernyataan SQL:

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

Rencana eksekusi berikut berisi field Fulltext Filter. Ini menunjukkan bahwa pernyataan SQL menggunakan indeks terbalik teks penuh.

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 penggunaan

Persiapan data

Jalankan pernyataan SQL berikut untuk membuat tabel uji dan memasukkan data ke dalamnya.

-- 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');

-- Tulis data.
INSERT INTO wiki_articles VALUES
  (1, 'The Yangtze River is the longest river in China and the third longest in the world, with a total length of about 6,300 kilometers.'),
  (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 the most important traditional festival in China.'),
  (5, 'The Spring Festival usually falls between late January and mid-February in the Gregorian calendar. Main customs during the Spring Festival include pasting spring couplets, setting off firecrackers, having a New Year''s Eve dinner, and making New Year visits.'),
  (6, 'In 2006, the Spring Festival was approved by the State Council as one of the first national intangible cultural heritages.'),
  (7, 'Shandong has dozens of universities.'),
  (8, 'ShanDa is a famous university of Shandong.');

-- Kompaksi
VACUUM wiki_articles;

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

Hasil berikut dikembalikan:

id |                       content                       
---+---------------------------------------------------
 1 | The Yangtze River is the longest river in China and the third longest in the world, with a total length of about 6,300 kilometers.

Contoh pencarian berbeda

  • Pencocokan kata kunci.

    -- (K1) Pencocokan kata kunci (operator default=OR). Dokumen yang berisi 'shandong' atau 'university' dicocokkan.
    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 of Shandong.
    
    -- (K2) Pencocokan kata kunci (operator=AND). Dokumen harus berisi 'shandong' dan 'university' untuk dicocokkan.
    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 of Shandong.
  • Pencarian frasa.

    -- (P1) Pencarian frasa (slop default = 0). Pencocokan hanya terjadi jika '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. Jarak antara 'shandong' dan 'university' tidak boleh melebihi 14 karakter. Ini 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 tidak berurutan, tetapi perhitungan slop berbeda dan memerlukan nilai yang lebih besar daripada frasa berurutan.
    --      Oleh karena itu, 'university of Shandong' juga dapat mencocokkan kueri berikut, tetapi tidak akan dicocokkan jika 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 of Shandong.
    (3 rows)
    
    -- (P4) Perilaku dengan indeks tokenizer standard. (ALTER INDEX ft_idx_1 SET (tokenizer = 'standard');)
    --      Untuk tokenizer standard, slop dihitung dalam token.
    --      Selama tidak ada token di antaranya, terlepas dari jumlah spasi, dianggap sebagai pencocokan frasa.
    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. (Contoh dengan tokenizer Jieba)
    --      Meskipun ada koma antara 'river' dan 'with' dalam teks, dan string kueri memiliki titik.
    SELECT * FROM wiki_articles WHERE TEXT_SEARCH(content, 'river. with', mode => 'phrase') > 0;
    
    -- Hasil
     id |                       content                       
    ----+-----------------------------------------------------
      1 | The Yangtze River is the longest river in China and the third longest in the world, with a total length of about 6,300 kilometers.
    (1 row)
  • Pencarian bahasa alami.

    -- (N1) Kueri bahasa alami: Tanpa simbol apa pun, ini setara dengan pencocokan kata kunci. Sama seperti (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 of Shandong.
    
    -- (N2) Kueri bahasa alami: Pencocokan kata kunci. Harus berisi ('shandong' AND 'university') ATAU 'heritage'. Operator AND memiliki prioritas lebih tinggi daripada OR.
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, '(shandong AND university) OR heritage', 'natural_language') > 0;
    -- Setara dengan
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, 'shandong AND university OR heritage', 'natural_language') > 0;
    -- Setara dengan
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, '(+shandong +university) heritage', 'natural_language') > 0;
    
    -- Hasil
     id |                               content                               
    ----+---------------------------------------------------------------------
      8 | ShanDa is a famous university of 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 one of the first national intangible cultural heritages.
    
    -- (N3) Kueri bahasa alami: Pencocokan kata kunci. Harus berisi 'shandong', tidak boleh berisi 'university', dan boleh berisi 'heritage'.
    --      Dalam kueri ini, kata kunci 'heritage' tidak memiliki tanda + atau -, sehingga tidak memengaruhi baris mana yang dicocokkan. Namun, ini memengaruhi skor pencocokan. Baris dengan 'heritage' akan memiliki skor lebih tinggi.
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, '+shandong -university heritage', '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'. Skor relevansi lebih tinggi jika berisi 'famous'.
    -- Catatan: Kueri ini menunjukkan hasil perhitungan skor pada satu shard. Skor BM25 yang dihitung dapat bervariasi dengan jumlah shard yang berbeda dan organisasi file yang berbeda.
    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 of 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). Frasa harus diapit tanda kutip ganda (""). Jika frasa berisi tanda kutip ganda, harus di-escape dengan backslash (\).
    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. Setara dengan (P2). Mendukung pengaturan slop dengan sintaks ~.
    SELECT * FROM wiki_articles
            WHERE TEXT_SEARCH(content, '"shandong university"~23', 'natural_language') > 0;
            
    -- Hasil
     id |                               content                               
    ----+---------------------------------------------------------------------
      8 | ShanDa is a famous university of 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 the longest river in China and the third longest in the world, with a total length of about 6,300 kilometers.
      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 the most important traditional festival in China.
      5 | The Spring Festival usually falls between late January and mid-February in the Gregorian calendar. Main customs during the Spring Festival include pasting spring couplets, setting off firecrackers, having a New Year's Eve dinner, and making New Year visits.
      6 | In 2006, the Spring Festival was approved by the State Council as one of the first national intangible cultural heritages.
      7 | Shandong has dozens of universities.
      8 | ShanDa is a famous university of Shandong.
  • Pencarian kata kunci.

    -- (T1) Kueri kata kunci: Hasil tokenisasi secara eksplisit berisi "Spring Festival", sehingga dapat diambil.
    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 the most important traditional festival in China.
      5 | The Spring Festival usually falls between late January and mid-February in the Gregorian calendar. Main customs during the Spring Festival include pasting spring couplets, setting off firecrackers, having a New Year's Eve dinner, and making New Year visits.
      6 | In 2006, the Spring Festival was approved by the State Council as one of the first national intangible cultural heritages.
    
    
    -- (T2) Kueri kata kunci: Contoh yang tidak mengembalikan hasil.
    -- Karena kolom content tabel sumber wiki_articles menggunakan tokenizer Jieba secara default, yang memisahkan "shandong university".
    -- Kami menyarankan menggunakan kueri kata kunci dengan tokenizer keyword. Dalam kasus tersebut, data target dapat diambil.
    SELECT * FROM wiki_articles 
             WHERE TEXT_SEARCH(content, 'shandong university', 'term') > 0;
    
    -- Hasil         
     id | content 
    ----+---------

Contoh kueri kompleks

  • Kueri dengan primary key.

    -- Ambil teks yang berisi 'shandong' atau 'university' dan memiliki 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.
      
    
    -- Ambil teks yang berisi 'shandong' atau 'university', atau memiliki id kurang dari 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 of Shandong.
      1 | The Yangtze River is the longest river in China and the third longest in the world, with a total length of about 6,300 kilometers.
      3 | He graduated from the department of physics at Shandong University.
      7 | Shandong has dozens of universities.
  • Dapatkan skor dan ambil tiga hasil 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 of 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 fungsi TEXT_SEARCH baik di daftar SELECT maupun klausa 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 of 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}
  • Ambil dokumen dari sumber 'wiki' yang paling relevan dengan 'shandong university'.

    -- 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}

Rekomendasi penggunaan

Pengindeksan ulang menggunakan resource Serverless

Jika Anda memodifikasi properti tabel, kompaksi mungkin dipicu dan indeks mungkin dibangun ulang, yang mengonsumsi banyak resource CPU. Untuk memodifikasi properti tabel berikut, lakukan langkah-langkah di bawah ini:

  • Memodifikasi `bitmap_columns`, `dictionary_encoding_columns`, atau indeks vektor memicu kompaksi dan pengindeksan ulang. Oleh karena itu, jangan gunakan sintaks `ALTER TABLE xxx SET`. Sebagai gantinya, jalankan perintah berikut untuk menggunakan sintaks `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 kolom JSONB berorientasi kolom atau kolom indeks teks penuh juga memicu kompaksi dan pengindeksan ulang. Sintaks `REBUILD` tidak didukung untuk modifikasi ini. Sebagai gantinya, buat tabel sementara dengan mengikuti langkah-langkah 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 pada kolom yang sesuai.
CREATE INDEX <idx_name> ON <table_new> USING FULLTEXT (column_name);

-- Masukkan data ke tabel sementara, gunakan resource Serverless untuk menjalankan pekerjaan, dan selesaikan pembuatan 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 memodifikasi properti lain, seperti `distribution_key`, `clustering_key`, `segment_key`, dan format penyimpanan, gunakan sintaks `REBUILD` dengan resource Serverless Computing.

Operasi lanjutan: Menyesuaikan konfigurasi tokenizer

Hologres merekomendasikan penggunaan konfigurasi tokenizer default. Namun, dalam beberapa kasus, konfigurasi default mungkin tidak memenuhi kebutuhan bisnis Anda. Anda dapat menyesuaikan konfigurasi tokenizer untuk tokenisasi yang lebih fleksibel.

Persyaratan konfigurasi analyzer_params

Parameter `analyzer_params` memiliki persyaratan konfigurasi berikut:

  • Hanya string berformat JSON yang didukung.

  • Tingkat atas JSON mendukung dua kunci: `tokenizer` dan `filter`.

    • filter: Opsional. Nilainya adalah array JSON yang digunakan untuk mengonfigurasi properti filter token. Jika Anda mengonfigurasi beberapa properti filter token, properti tersebut diterapkan pada setiap token sesuai urutan yang ditentukan.

    • tokenizer: Wajib. Nilainya adalah objek JSON yang digunakan untuk mengonfigurasi properti tokenizer. Objek JSON mendukung kunci berikut:

      • type: Wajib. Nama tokenizer.

      • Parameter lain untuk objek tokenizer. Tokenizer berbeda mendukung parameter berbeda, seperti ditunjukkan dalam tabel berikut:

        Tokenizer

        Parameter lain untuk
        objek tokenizer

        Deskripsi parameter

        Nilai parameter

        jieba

        mode

        Menentukan mode tokenisasi.

        • search (default): Menampilkan beberapa kombinasi yang mungkin selama tokenisasi, yang memungkinkan redundansi. Misalnya, hasil tokenisasi untuk "festival tradisional" adalah "tradisional", "festival", dan "festival tradisional".

        • exact: Mencegah pemisahan redundan selama tokenisasi. Misalnya, hasil tokenisasi untuk "festival tradisional" hanya "festival tradisional".

        hmm

        Menentukan apakah akan menggunakan Model Markov Tersembunyi (HMM) untuk mengidentifikasi kata yang tidak ada dalam kamus. Ini meningkatkan pengenalan kata baru.

        • true (default): Diaktifkan

        • false: Dinonaktifkan.

        standard

        max_token_length

        Panjang token maksimum.

        Bilangan bulat positif. Nilai default adalah 255. Jika token melebihi panjang ini, token tersebut dipisah pada interval `max_token_length`.

        ik

        mode

        Menentukan mode tokenisasi.

        • ik_max_word (default): Melakukan tokenisasi detail halus yang menghasilkan semua kata pendek yang mungkin. Misalnya, hasil tokenisasi untuk "Kota Nanjing" adalah "Nanjing" dan "Kota".

        • ik_smart: Melakukan tokenisasi kasar yang memprioritaskan kata panjang dan mengurangi jumlah pemisahan. Token output tidak tumpang tindih. Mode ini mencoba menggabungkan angka dan kuantifier menjadi satu token. Misalnya, "Kota Nanjing" 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.

        Bilangan positif. Nilai default adalah 1. Selisih maksimum antara `min_ngram` dan `max_ngram` adalah 3.

        Catatan: Anda dapat menyesuaikan selisih maksimum dengan mengatur GUC berikut. Misalnya, SET hg_fulltext_index_max_ngram_diff = 5.

        max_ngram

        Panjang karakter maksimum token.

        Nilai default adalah 2. Nilai harus dalam rentang [1, 255]. Selisih maksimum antara `min_ngram` dan `max_ngram` adalah 3.

        Catatan

        Jika selisih antara `max_ngram` dan `min_ngram` terlalu besar, tokenizer ngram menghasilkan banyak token. Hal ini dapat meningkatkan konsumsi resource, memerlukan lebih banyak penyimpanan indeks, dan memperpanjang waktu pembuatan indeks.

        prefix_only

        Menentukan apakah hanya mempertimbangkan awalan.

        • true

        • false (default)

        pinyin

        keep_first_letter

        Menentukan apakah akan menyimpan huruf awal setiap karakter Tionghoa sebagai token.

        • true (default): Menyimpan huruf awal. Misalnya, hasil tokenisasi untuk "Li Ming" mencakup "lm".

        • false: Tidak menyimpan.

        keep_separate_first_letter

        Menentukan apakah akan menyimpan huruf awal setiap karakter Tionghoa sebagai token terpisah.

        • true: Menyimpan huruf awal secara terpisah. Misalnya, hasil tokenisasi untuk "Li Ming" mencakup "l,m".

        • false (default): Pengaturan tidak menyimpan nilai.

        limit_first_letter_length

        Panjang maksimum token huruf awal.

        Bilangan bulat yang menentukan panjang maksimum string huruf awal. Nilai default adalah 16.

        keep_full_pinyin

        Menentukan apakah akan menyimpan Pinyin lengkap setiap karakter Tionghoa sebagai token terpisah.

        • true (default): Menyimpan Pinyin lengkap. Misalnya, hasil tokenisasi untuk "Li Ming" mencakup "li,ming".

        • false: Item tidak disimpan.

        keep_joined_full_pinyin

        Menentukan apakah akan menggabungkan Pinyin lengkap setiap karakter Tionghoa menjadi satu token.

        • true: Menggabungkan Pinyin lengkap. Misalnya, hasil tokenisasi untuk "Li Ming" mencakup "liming".

        • false (default): Sistem tidak membuat koneksi.

        keep_none_chinese

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

        • true (default): Simpan.

        • false: Tidak disimpan.

        keep_none_chinese_together

        Menentukan apakah akan menyimpan huruf atau angka non-Tionghoa bersama-sama.

        • true (default): Menyimpan karakter non-Tionghoa bersama. Misalnya, hasil tokenisasi untuk "DJ Li Ming" adalah "DJ,li,ming", di mana "DJ" tetap bersama.

        • false: Tidak menyimpan karakter non-Tionghoa bersama. Misalnya, hasil tokenisasi untuk "DJ Li Ming" adalah "D,J,li,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 huruf awal.

        • true (default): Simpan. Misalnya, hasil tokenisasi 李明AT2025 mencakup lmat2025.

        • false: Item tidak disimpan.

        keep_none_chinese_in_joined_full_pinyin

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

        • true: Menyimpan karakter non-Tionghoa. Misalnya, hasil tokenisasi untuk "Li Ming AT2025" mencakup "limingat2025".

        • false (default): Resource tidak disimpan.

        none_chinese_pinyin_tokenize

        Jika huruf non-Tionghoa merupakan Pinyin yang valid, tentukan apakah akan memisahkannya menjadi istilah Pinyin terpisah.

        • true (default): Memisahkan istilah. Misalnya, hasil tokenisasi untuk "limingalibaba2025" mencakup "li,ming,a,li,ba,ba,2025".

        • false: Tidak memisahkan istilah.

        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.

        • Jika parameter ini diatur ke true, token tertentu dihapus. Misalnya, "de的" ditokenisasi sebagai "de", yang 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, hasil tokenisasi untuk "Li Ming" mencakup dua token "Li" dan "Ming".

        • false (default): Item tidak disimpan.

Konfigurasi analyzer_params default

Konfigurasi `analyzer_params` default untuk tokenizer berbeda adalah sebagai berikut:

Analyzer name

Konfigurasi analyzer_params default

Contoh tokenisasi

jieba (alat analisis default)

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

whitespace

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

keyword

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

simple

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

standard

{
  "tokenizer": {
    "type": "standard",
    "max_token_length": 255
  }, 
  "filter": [
    "lowercase"
  ]
}
Spring
Festival
that
is
the
Lunar
New
Year
is
China
's
most
important
traditional
festival

icu

{
  "tokenizer": {
    "type": "icu"
  }, 
  "filter": [
    "removepunct",
    "lowercase"
  ]
}
Spring Festival
,
 that is
 the 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
that
is
the Lunar New Year
is
China
's most
most important
important
traditional festival
traditional
festival

ngram

{
  "tokenizer": {
    "type": "ngram",
    "min_gram": 1,
    "max_gram": 2,
    "prefix_only": false
  }
}
Spring
Spring Festival
Festival
Festival,
,
, that
that
that is
is
is the
the
the Lunar
Lunar
Lunar New
New
New Year
Year
Year,
,
, is
is
is China
China
China's
's
's most
most
most important
important
important
important
important
important
traditional
traditional
traditional festival
festival
festival
.

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, juga dikenal sebagai properti filter token, dalam `analyzer_params`.

Catatan

Jika Anda mengonfigurasi beberapa properti filter token, properti tersebut diterapkan pada setiap token sesuai urutan yang ditentukan.

Nama properti

Deskripsi properti

Format parameter

Contoh

lowercase

Mengonversi huruf kapital dalam token menjadi huruf kecil.

Deklarasikan `lowercase`.

"lowercase"
  • Definisi properti filter token

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

    ["Hello", "WORLD"] dikonversi menjadi ["hello", "world"].

stop

Menghapus token kata berhenti.


stop_words: Daftar kata berhenti. Ini harus berupa daftar yang hanya berisi string. Anda dapat mendefinisikan kata berhenti kustom atau menggunakan kamus kata berhenti bawaan untuk bahasa tertentu:

"_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 token

    ["the", "cat", "is", "on", "a", "mat"] dikonversi menjadi ["mat"].

    Catatan

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

stemmer

Mengonversi token menjadi bentuk dasar (stem) yang sesuai berdasarkan aturan tata bahasa bahasa tersebut.

language: Bahasa. Bahasa bawaan berikut didukung:

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

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

    ["machine", "learning"] dikonversi menjadi ["machin", "learn"].

length

Menghapus token yang melebihi panjang tertentu.

max: Panjang maksimum yang disimpan. Ini harus berupa bilangan bulat positif.

{"type": "length", "max": 10}
  • Definisi properti filter token

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

    ["AI", "for", "Artificial", "Intelligence"] dikonversi menjadi ["AI", "for", "Artificial"].

removepunct

Menghapus token yang hanya terdiri dari karakter tanda baca.

Deklarasikan `removepunct`.

"removepunct"
Catatan

Di V4.0.8 dan versi selanjutnya, `removepunct` memiliki parameter `mode` baru yang menentukan mode penghapusan. Nilainya sebagai berikut:

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

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

  • Definisi properti filter token

    "filter": ["removepunct"]
    Catatan

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

  • Hasil filter token

    ["chinese", "english", "chinese.", "english.", "124", "124!=8", ".", ",", ",,", " ..."] dikonversi menjadi ["chinese", "english", "chinese.", "english.", "124", "124!=8"].

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

    ["chinese", "english", "chinese.", "english.", "124", "124!=8", ".", ",", ",,", " ..."] dikonversi menjadi ["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
}

Properti konfigurasi filter sama dengan untuk tokenizer Pinyin.