全部产品
Search
文档中心

Hologres:Indeks terbalik teks penuh

更新时间:Jan 16, 2026

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

Cara kerja

Saat Anda menulis teks sumber ke Hologres, sistem membuat file indeks terbalik teks penuh untuk setiap file data berdasarkan konfigurasi indeks. Selama proses ini, tokenizer melakukan segmentasi teks menjadi token. Indeks tersebut mencatat pemetaan antara setiap token dan teks sumber, termasuk posisi, frekuensi term, serta informasi terkait lainnya.

Saat melakukan pencarian teks, kueri pencarian terlebih dahulu disegmentasi menjadi sekumpulan token kueri. Algoritma BM25 kemudian menghitung skor relevansi antara setiap teks sumber dan kumpulan token kueri tersebut, sehingga menghasilkan pencarian teks penuh yang berkinerja tinggi dan presisi.

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.

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

  • Indeks terbalik teks penuh hanya dapat dibangun pada satu kolom saja, dan 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 dan data batch yang baru diimpor akan dibangun secara asinkron selama proses compaction. Sebelum file indeks dibangun, skor relevansi BM25 untuk data tersebut bernilai 0.

  • Perilaku penulisan data real-time setelah pembuatan indeks terbalik teks penuh berbeda antarversi. Sebelum Hologres V4.0.8, indeks dibangun secara sinkron selama penulisan data real-time. Mulai dari V4.0.8 dan versi selanjutnya, demi meningkatkan efisiensi penulisan real-time dan performa pembuatan indeks, sistem merefresh indeks real-time di memori secara asinkron setiap detik. Anda hanya dapat mengkueri data menggunakan indeks tersebut setelah proses refresh selesai.

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

  • Anda dapat menggunakan resource Serverless Computing untuk melakukan impor data batch. Resource Serverless menyelesaikan compaction dan pembuatan indeks teks penuh secara sinkron selama impor data. Untuk informasi lebih lanjut, lihat Gunakan Serverless Computing untuk menjalankan pekerjaan baca dan tulis dan Gunakan Serverless Computing untuk menjalankan pekerjaan compaction. Jika Anda tidak menggunakan resource Serverless, Anda harus menjalankan perintah berikut secara manual untuk memicu compaction setelah impor data batch atau modifikasi 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 compaction secara manual untuk menggabungkan file, sehingga meningkatkan akurasi pencarian.

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

  • Pilih tokenizer berdasarkan skenario Anda seperti yang dijelaskan dalam tabel berikut:

    Skenario

    Tokenizer

    Catatan

    Ekstraksi kata kunci dari artikel panjang

    Jieba

    Mendukung penemuan kata baru dan peralihan pola kompleks.

    Pencarian teks deskriptif berbahasa Mandarin

    IK

    Mengidentifikasi istilah Mandarin secara akurat.

    Pencarian judul berbahasa Inggris

    Simple, Whitespace, Standard

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

    Pencarian kabur pada teks log

    Ngram

    Tidak memerlukan kamus. Memenuhi kebutuhan kueri teks kabur.

    Pencarian Pinyin untuk nama produk atau orang Mandarin

    Pinyin

    Mendukung berbagai skenario Pinyin Mandarin, seperti Pinyin lengkap, huruf awal, dan derivasi 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 ] [ , ... ] ) ];

Parameter

Parameter

Deskripsi

idx_name

Nama indeks.

table_name

Nama tabel target.

column_name

Nama kolom target tempat membangun indeks terbalik teks penuh.

storage_parameter

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

  • tokenizer: Nama tokenizer. Tokenizer berikut didukung:

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

    • whitespace: Tokenizer whitespace. Melakukan segmentasi teks berdasarkan spasi.

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

    • simple: Tokenizer sederhana. Melakukan segmentasi teks berdasarkan spasi dan tanda baca.

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

    • icu: Tokenizer untuk pemrosesan teks multibahasa.

    • ik: Tokenizer Mandarin berbasis IK Analyzer. Dapat secara otomatis mengenali format khusus seperti kata bahasa Inggris, alamat email, URL (tanpa ://), dan alamat IP. Didukung di Hologres V4.0.9 dan versi selanjutnya.

    • ngram: Tokenizer berbasis jendela geser karakter. Membagi teks menjadi n-gram berurutan (urutan n karakter atau kata) untuk meningkatkan tingkat recall dan kemampuan pencocokan kabur sistem pencarian. 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 Mandarin dalam teks. Juga mendukung pemisahan dan derivasi Pinyin untuk string non-Mandarin guna membantu mencapai generasi Pinyin yang lebih akurat dan tingkat recall pencarian yang lebih tinggi. 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. Anda hanya perlu menentukan parameter tokenizer tanpa perlu mengonfigurasi eksplisit parameter analyzer_params.

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

Catatan

Anda hanya dapat menetapkan satu jenis tokenizer dan analyzer_params dalam satu indeks yang sama.

Contoh

  • Buat indeks terbalik teks penuh dengan tokenizer dan konfigurasi default (Jieba).

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

    CREATE INDEX idx1 ON tbl 
           USING FULLTEXT (col1)
           WITH (tokenizer = 'ik');
  • Tentukan secara eksplisit konfigurasi tokenizer kustom: tokenizer Jieba + mode exact + hanya filter lowercase untuk konversi huruf besar/kecil.

    CREATE INDEX idx1 ON tbl 
           USING FULLTEXT (col1)
           WITH (tokenizer = 'jieba',
                 analyzer_params = '{"tokenizer":{"type":"jieba","mode":"exact"}, "filter":["lowercase"]}');
Catatan

Ubah indeks

Sintaksis

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

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

Parameter

Untuk informasi lebih lanjut tentang parameter, lihat Parameter.

Contoh

Catatan

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

  • Ubah tokenizer indeks menjadi standard.

    ALTER INDEX idx1 SET (tokenizer = 'standard');
  • Ubah tokenizer indeks menjadi IK, gunakan mode ik_max_word, nonaktifkan konversi huruf kecil, dan jangan tambahkan filter.

    ALTER INDEX idx1 SET (
      tokenizer = 'jieba',
      analyzer_params = '{"tokenizer":{"type":"ik","mode":"ik_max_word","enable_lowercase": false}}'
    );
  • Atur ulang indeks agar 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

Sintaksis

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

Parameter

Untuk informasi lebih lanjut tentang parameter, lihat Parameter.

Lihat indeks

Hologres menyediakan tabel sistem hologres.hg_index_properties, yang dapat Anda gunakan untuk melihat indeks terbalik teks penuh yang telah dibuat dan lokasi yang sesuai.

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 perintah SELECT * FROM hologres.hg_index_properties;.

  • indexname: Nama indeks yang telah dibuat.

Gunakan indeks untuk pencarian teks penuh

Hologres mendukung berbagai mode pencarian untuk membantu Anda melakukan pencarian teks penuh secara fleksibel berdasarkan logika bisnis Anda.

Mode pencarian

Deskripsi

Pencocokan kata kunci

Mencari berdasarkan kata kunci hasil tokenisasi objek pencarian. Mendukung pendefinisian hubungan AND/OR antar kata kunci.

Pencarian frasa

Mencari berdasarkan frasa dari objek pencarian. Pencocokan hanya terjadi jika persyaratan jarak antar beberapa kata terpenuhi.

Pencarian bahasa alami

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

Pencarian Istilah

Menjalankan pencarian tepat untuk objek pencarian. Pencocokan hanya terjadi jika indeks berisi string kueri yang persis sama.

Fungsi pencarian TEXT_SEARCH

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

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

Parameter

Parameter

Wajib

Deskripsi

search_data

Ya

Sumber pencarian. Tipe data dapat berupa TEXT, VARCHAR, atau CHAR. Hanya parameter input kolom yang didukung, dan kolom tersebut harus memiliki indeks teks penuh. Jika tidak, sistem akan mengembalikan error.

search_expression

Ya

Objek pencarian. Tipe data dapat berupa TEXT, VARCHAR, atau CHAR. Hanya konstanta yang didukung.

mode

Tidak

Mode pencarian. Mode berikut didukung:

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

  • phrase: Pencarian frasa. Jarak antar kata dalam frasa dikonfigurasi dengan menentukan slop dalam parameter options. Default-nya adalah 0, artinya kata-kata dalam frasa harus berdekatan.

  • natural_language: Pencarian bahasa alami. Mendukung penggunaan 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 term. Tidak melakukan tokenisasi atau pemrosesan lain pada search_expression. Langsung melakukan pencocokan tepat di indeks.

operator

Tidak

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

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

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

tokenizer, analyzer_params

Tidak

Tokenizer dan konfigurasi yang digunakan untuk search_expression. Umumnya Anda tidak perlu mengonfigurasi parameter ini.

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

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

options

Tidak

Parameter lain untuk pencarian teks penuh. Format input adalah 'key1=v1;key2=v2;....;keyN=vN;'.

Saat ini, hanya parameter slop yang didukung. Parameter ini hanya berlaku ketika mode diatur ke phrase. Parameter ini mendukung nilai 0 (default) atau bilangan bulat positif dan mendefinisikan jarak yang dapat ditoleransi antar kata dalam frasa.

Catatan

slop merepresentasikan celah maksimum yang diizinkan (atau overhead transposisi) antara kata-kata yang membentuk frasa. Untuk tokenizer seperti jieba, keyword, dan icu, satuan celah adalah jumlah karakter, bukan jumlah token. Untuk tokenizer seperti standard, simple, dan whitespace, satuan celah adalah jumlah token.

Deskripsi 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, sedangkan skor 0 menunjukkan bahwa teks tersebut 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;
    
    -- Jika Anda tidak menentukan nama parameter, Anda harus menentukan parameter input 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 + (kata wajib) dan - (kata yang dikecualikan).
    SELECT TEXT_SEARCH (content, '+learning -machine system', 'natural_language') FROM tbl;
  • Gunakan mode pencarian term.

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

Fungsi tokenisasi TOKENIZE

Fungsi TOKENIZE menghasilkan hasil tokenisasi berdasarkan konfigurasi tokenizer. Anda dapat menggunakan fungsi ini untuk menguji efek tokenisasi indeks terbalik teks penuh.

Sintaksis fungsi

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

Parameter

  • search_data: Wajib. Teks target untuk tokenisasi. Parameter ini mendukung input konstanta.

  • tokenizer, analyzer_params: Opsional. Tokenizer dan konfigurasi yang digunakan untuk teks target search_data. Secara default, tokenizer Jieba digunakan.

Deskripsi nilai kembalian

Fungsi ini mengembalikan sekumpulan token untuk teks target dengan tipe kembalian berupa array TEXT.

Verifikasi penggunaan indeks

Anda dapat memeriksa rencana eksekusi untuk melihat apakah pernyataan SQL menggunakan indeks terbalik teks penuh. Jika rencana tersebut berisi Fulltext Filter, berarti indeks berhasil 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, yang menunjukkan bahwa pernyataan SQL berhasil 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

Persiapkan data

Anda dapat menjalankan pernyataan SQL berikut untuk membuat tabel uji dan menulis 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 China''s largest river and the third longest river 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, 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.');

-- Compaction
VACUUM wiki_articles;

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

Berikut adalah contoh hasilnya:

id |                       content                       
---+---------------------------------------------------
 1 | The Yangtze River is China's largest river and the third longest river 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' akan 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). Pencocokan hanya terjadi jika dokumen berisi kedua kata '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 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. Jika jarak antara 'shandong' dan 'university' tidak lebih dari 14 karakter, "Shandong has dozens of universities." dapat dicocokkan.
    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 pencocokan frasa tak terurut, tetapi perhitungan slop berbeda dan memerlukan nilai yang lebih besar daripada frasa terurut.
    --      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, dianggap sebagai pencocokan frasa, terlepas dari jumlah 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. (Contoh dengan tokenizer Jieba)
    --      Bahkan jika teks memiliki koma antara 'long river' dan 'total length', dan string kueri memiliki titik.
    SELECT * FROM wiki_articles WHERE TEXT_SEARCH(content, 'long river.total length', mode => 'phrase') > 0;
    
    -- Hasil
     id |                       content                       
    ----+-----------------------------------------------------
      1 | The Yangtze River is China's largest river and the third longest river in the world, with a total length of about 6,300 kilometers.
    (1 row)
  • Kueri bahasa alami

    -- (N1) Kueri bahasa alami: Tanpa simbol, ini setara dengan pencocokan kata kunci secara default. 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. Pencocokan terjadi jika dokumen berisi kedua kata 'shandong' dan 'university', atau berisi 'heritage'. Operator AND memiliki prioritas lebih tinggi daripada operator 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 diawali simbol + atau -. Ini tidak memengaruhi baris mana yang dicocokkan, tetapi memengaruhi skor pencocokan. Dokumen yang berisi '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'. Dokumen yang berisi 'famous' memiliki skor relevansi lebih tinggi.
    -- Catatan: Kueri ini menunjukkan skor yang dihitung pada satu shard. Skor BM25 yang dihitung dapat berbeda dengan jumlah shard atau 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. Ini setara dengan (P1). Frasa harus diapit tanda kutip ganda (""). Jika frasa berisi tanda kutip ganda, 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. Ini setara dengan (P2). Sintaksis ~ didukung untuk mengatur slop.
    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 China's largest river and the third longest river 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, 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.
  • Kueri term

    -- (T1) Kueri term: 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, 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 term: Contoh kueri yang tidak menghasilkan data.
    -- Karena kolom content pada tabel sumber wiki_articles menggunakan tokenizer Jieba secara default, "shandong university" dipisah.
    -- Untuk skenario ini, gunakan kueri term dengan tokenizer keyword untuk mengambil data target.
    SELECT * FROM wiki_articles 
             WHERE TEXT_SEARCH(content, 'shandong university', 'term') > 0;
    
    -- Hasil         
     id | content 
    ----+---------

Contoh kueri kompleks

  • Gabungkan 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 China's largest river and the third longest river 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.
  • Ambil skor dan kembalikan 3 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 klausa output maupun 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}

Contoh tokenizer berbeda

  • Gunakan tokenizer Jieba default. Mode pencarian default menghasilkan lebih banyak bentuk kata untuk meningkatkan hasil pencarian.

    SELECT TOKENIZE('He came to Beijing Tsinghua University', 'jieba');
    
    -- Hasil
                    tokenize                
    --------------------------------------
    {he,came,to,beijing,tsinghua,hua,university,tsinghua university}
  • Gunakan tokenizer Jieba kustom dalam mode exact, yang tidak menghasilkan bentuk kata tambahan.

    SELECT TOKENIZE('He came to Beijing Tsinghua University', 'jieba', '{"tokenizer": {"type": "jieba", "mode": "exact"}}');
    
    -- Hasil
            tokenize         
    -----------------------
    {he,came,to,beijing,tsinghua university}
  • Perbandingan tokenizer (masing-masing dengan konfigurasi default-nya).

    SELECT TOKENIZE('He came to Beijing Tsinghua University', 'jieba') as jieba,
           TOKENIZE('He came to Beijing Tsinghua University', 'ik') as ik,
           TOKENIZE('He came to Beijing Tsinghua University', 'keyword') as keyword,
           TOKENIZE('He came to Beijing Tsinghua University', 'whitespace') as whitespace,
           TOKENIZE('He came to Beijing Tsinghua University', 'simple') as simple,
           TOKENIZE('He came to Beijing Tsinghua University', 'standard') as standard,
           TOKENIZE('He came to Beijing Tsinghua University', 'icu') as icu,
           TOKENIZE('He came to Beijing Tsinghua University', 'ngram') as ngram,
           TOKENIZE('He came to Beijing Tsinghua University', 'pinyin') as pinyin;
             
    -- Hasil
    -[ RECORD 1 ]--------------------------------------------------------------------
    jieba      | {he,came,to,beijing,tsinghua,hua,university,tsinghua university}
    ik         | {he,came,to,beijing,tsinghua university,tsinghua,university}
    keyword    | {He came to Beijing Tsinghua University}
    whitespace | {He,came,to,Beijing,Tsinghua,University}
    simple     | {he,came,to,beijing,tsinghua,university}
    standard   | {he,came,to,beijing,tsinghua,university}
    icu        | {he,came,to,beijing,tsinghua,university}
    ngram      | {h,he,e,"e ",c,ca,a,am,m,me,e,"e ",t,to,o,"o ",b,be,e,ei,i,ij,j,ji,i,in,n,ng,g,"g ",t,ts,s,si,i,in,n,ng,g,gh,h,hu,u,ua,a,"a ",u,un,n,ni,i,iv,v,ve,e,er,r,rs,s,si,i,it,t,ty,y}
    pinyin     | {ta,tldbjqhdx,lai,dao,bei,jing,qing,hua,da,xue}
  • Perbandingan efek tokenisasi pada http_logs.

    SELECT TOKENIZE('211.11.X.X - - [1998-06-21T15:00:01-05:00] \"GET /english/index.html HTTP/1.0\" 304 0', 'jieba') as jieba,
           TOKENIZE('211.11.X.X - - [1998-06-21T15:00:01-05:00] \"GET /english/index.html HTTP/1.0\" 304 0', 'ik') as ik,
           TOKENIZE('211.11.X.X - - [1998-06-21T15:00:01-05:00] \"GET /english/index.html HTTP/1.0\" 304 0', 'keyword') as keyword,
           TOKENIZE('211.11.X.X - - [1998-06-21T15:00:01-05:00] \"GET /english/index.html HTTP/1.0\" 304 0', 'whitespace') as whitespace,
           TOKENIZE('211.11.X.X - - [1998-06-21T15:00:01-05:00] \"GET /english/index.html HTTP/1.0\" 304 0', 'simple') as simple,
           TOKENIZE('211.11.X.X - - [1998-06-21T15:00:01-05:00] \"GET /english/index.html HTTP/1.0\" 304 0', 'standard') as standard,
           TOKENIZE('211.11.X.X - - [1998-06-21T15:00:01-05:00] \"GET /english/index.html HTTP/1.0\" 304 0', 'icu') as icu,
           TOKENIZE('211.11.X.X - - [1998-06-21T15:00:01-05:00] \"GET /english/index.html HTTP/1.0\" 304 0', 'ngram') as ngram,
           TOKENIZE('211.11.X.X - - [1998-06-21T15:00:01-05:00] \"GET /english/index.html HTTP/1.0\" 304 0', 'pinyin') as pinyin;
           
    -- Hasil yang dikembalikan       
    -[ RECORD 1 ]-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    jieba      | {211.11,9.0,1998-06,21t15,00,01-05,00,get,english,index,html,http,1.0,304,0}
    ik         | {211.11.X.X,1998-06-21t15,1998,06,21,t,15,00,01-05,01,05,00,get,english,index.html,index,html,http,1.0,304,0}
    keyword    | {"211.11.X.X - - [1998-06-21T15:00:01-05:00] \\\"GET /english/index.html HTTP/1.0\\\" 304 0"}
    whitespace | {211.11.X.X,-,-,[1998-06-21T15:00:01-05:00],"\\\"GET",/english/index.html,"HTTP/1.0\\\"",304,0}
    simple     | {211,11,9,0,1998,06,21t15,00,01,05,00,get,english,index,html,http,1,0,304,0}
    standard   | {211.11.X.X,1998,06,21t15,00,01,05,00,get,english,index.html,http,1.0,304,0}
    icu        | {211.11.X.X,1998,06,21t15,00,01,05,00,get,english,index.html,http,1.0,304,0}
    ngram      | {2,21,1,11,1,1.,.,.1,1,11,1,1.,.,.9,9,9.,.,.0,0,"0 "," "," -",-,"- "," "," -",-,"- "," "," [",[,[1,1,19,9,99,9,98,8,8-,-,-0,0,06,6,6-,-,-2,2,21,1,1T,T,T1,1,15,5,5:,:,:0,0,00,0,0:,:,:0,0,01,1,1-,-,-0,0,05,5,5:,:,:0,0,00,0,0],],"] "," "," \\","\\","\\\"","\"","\"G",G,GE,E,ET,T,"T "," "," /",/,/e,e,en,n,ng,g,gl,l,li,i,is,s,sh,h,h/,/,/i,i,in,n,nd,d,de,e,ex,x,x.,.,.h,h,ht,t,tm,m,ml,l,"l "," "," H",H,HT,T,TT,T,TP,P,P/,/,/1,1,1.,.,.0,0,"0\\","\\","\\\"","\"","\" "," "," 3",3,30,0,04,4,"4 "," "," 0",0}
    pinyin     | {211119019980621,211119019980621t,t,1500010500,ge,teng,li,shi,n,de,x,h,t,m,l,h,t,t,p,103040}

Operasi lanjutan: Menyesuaikan konfigurasi tokenizer

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

Persyaratan konfigurasi analyzer_params

Persyaratan konfigurasi untuk parameter analyzer_params adalah sebagai berikut:

  • Hanya string berformat JSON yang didukung.

  • Tingkat atas JSON mendukung dua kunci: tokenizer dan filter. Nilainya dijelaskan sebagai berikut:

    • filter: Opsional. Nilainya adalah array JSON yang digunakan untuk mengonfigurasi properti penyaringan token. Jika Anda mengonfigurasi beberapa properti penyaringan 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 dari objek tokenizer. Parameter yang didukung bervariasi tergantung tokenizer, seperti yang ditunjukkan dalam tabel berikut:

        Tokenizer

        Parameter lain dari
        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 "traditional festival" adalah "traditional", "festival", dan "traditional festival".

        • exact: Tidak melakukan pemisahan redundan selama tokenisasi. Misalnya, hasil tokenisasi untuk "traditional festival" adalah "traditional festival".

        hmm

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

        • true: Fitur diaktifkan. Ini adalah nilai default.

        • false: Pengaturan ini dinonaktifkan.

        standard

        max_token_length

        Panjang maksimum token.

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

        ik

        mode

        Menentukan mode tokenisasi.

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

        • ik_smart: Melakukan tokenisasi kasar. Mode ini memprioritaskan kata panjang untuk mengurangi jumlah pemisahan. Token output tidak tumpang tindih. Mode ini mencoba 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 minimum token dalam karakter.

        Bilangan bulat positif. Nilai default adalah 1. Selisih maksimum antara nilai ini dan max_ngram adalah 3.

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

        max_ngram

        Panjang maksimum token dalam karakter.

        Nilai default adalah 2. Nilai harus berada dalam rentang [1, 255]. Selisih maksimum antara nilai ini dan min_ngram adalah 3.

        Catatan

        Jika selisih antara max_ngram dan min_ngram terlalu besar, tokenizer ngram menghasilkan banyak token. Hal ini 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 Pinyin setiap karakter Mandarin.

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

        • false: Tidak akan disimpan.

        keep_separate_first_letter

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

        • true: Menyimpan huruf awal sebagai token terpisah. Misalnya, hasil tokenisasi untuk "李明" (Li Ming) mencakup "l" dan "m".

        • false (default): Item tidak disimpan.

        limit_first_letter_length

        Panjang maksimum token yang berisi huruf awal.

        Panjang maksimum string huruf awal yang disimpan. Bilangan bulat. Default-nya adalah 16.

        keep_full_pinyin

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

        • true (default): Menyimpan suku kata Pinyin sebagai token terpisah. Misalnya, hasil tokenisasi untuk "李明" (Li Ming) mencakup "li" dan "ming".

        • false: Item tidak disimpan.

        keep_joined_full_pinyin

        Menentukan apakah akan menggabungkan Pinyin lengkap semua karakter Mandarin menjadi satu token.

        • true: Menggabungkan suku kata Pinyin menjadi satu token. Misalnya, hasil tokenisasi untuk "李明" (Li Ming) mencakup "liming".

        • false (bawaan): Koneksi tidak dibuat.

        keep_none_chinese

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

        • true (default): Menyimpannya.

        • Salah: Jangan simpan.

        keep_none_chinese_together

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

        • true (default): Menyimpan teks non-Mandarin yang berurutan bersama. Misalnya, hasil tokenisasi untuk "DJ李明" (DJ Li Ming) mencakup "DJ", "li", dan "ming", di mana "DJ" adalah satu token.

        • false: Memisahkan teks non-Mandarin yang berurutan. Misalnya, hasil tokenisasi untuk "DJ李明" (DJ Li Ming) mencakup "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 menyertakan huruf atau angka non-Mandarin dalam token yang berisi huruf awal.

        • true (default): Menggabungkan huruf awal Pinyin dengan teks non-Mandarin. Misalnya, hasil tokenisasi untuk "李明AT2025" (Li Ming AT2025) mencakup token "lmat2025".

        • false: Jangan pertahankan.

        keep_none_chinese_in_joined_full_pinyin

        Menentukan apakah akan menyertakan huruf atau angka non-Mandarin dalam token Pinyin lengkap yang digabung.

        • true: Menggabungkan Pinyin lengkap dengan teks non-Mandarin. Misalnya, hasil tokenisasi untuk "李明AT2025" (Li Ming AT2025) mencakup token "limingat2025".

        • false (default): Tidak menyimpannya.

        none_chinese_pinyin_tokenize

        Jika huruf non-Mandarin membentuk suku kata Pinyin, tentukan apakah akan memisahkannya menjadi istilah Pinyin terpisah.

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

        • false: Tidak memisahkannya.

        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 huruf non-Tiongkok akan dikonversi menjadi huruf kecil.

        • true (default)

        • false

        trim_whitespace

        Menentukan apakah akan menghapus karakter spasi.

        • true (default)

        • false

        remove_duplicated_term

        Menentukan apakah akan menghapus token duplikat.

        • true: Menghapus token duplikat. Misalnya, hasil tokenisasi untuk "de的" adalah "de". Namun, ini memengaruhi hasil kueri frasa untuk "de的".

        • false (default): Tidak menghapus duplikat.

        keep_separate_chinese

        Menentukan apakah akan menyimpan karakter Mandarin individual sebagai token terpisah.

        • true: Menyimpan karakter tunggal sebagai token terpisah. Misalnya, hasil tokenisasi untuk "李明" (Li Ming) mencakup dua token "李" dan "明".

        • false (default): Tidak menyimpannya.

Konfigurasi analyzer_params default

Konfigurasi analyzer_params default untuk tokenizer berbeda adalah sebagai berikut:

Nama tokenizer

Konfigurasi analyzer_params default

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, also known as the Lunar New Year, is the most important traditional festival in China.

whitespace

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

keyword

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

simple

{
  "tokenizer": {
    "type": "simple"
  }, 
  "filter": [
    "lowercase"
  ]
}
Spring Festival
Also known as the Lunar New Year
The most important traditional festival in China

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"
  ]
}
The Spring Festival, also known as the Lunar New Year, is the most important traditional festival in China.

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., the Lunar New Year, is China's most important 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 konfigurasi properti filter berikut (properti penyaringan token) dalam analyzer_params.

Catatan

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

Nama properti

Deskripsi

Format parameter

Contoh

lowercase

Mengonversi huruf besar dalam token menjadi huruf kecil.

Anda hanya perlu menggunakan lowercase untuk deklarasi.

"lowercase"
  • Definisi properti filter

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

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

stop

Menghapus token yang merupakan kata berhenti (stop words).


stop_words: Daftar kata berhenti. 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

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

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

    Catatan

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

stemmer

Mengurangi token menjadi akar katanya berdasarkan aturan tata bahasa bahasa yang sesuai.

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

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

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

length

Menghapus token yang melebihi panjang tertentu.

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

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

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

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

removepunct

Menghapus token yang hanya terdiri dari karakter tanda baca.

Cukup deklarasikan removepunct.

"removepunct"
Catatan

Di V4.0.8 dan versi selanjutnya, filter removepunct mencakup parameter mode, yang menentukan mode penghapusan. Nilainya adalah sebagai berikut:

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

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

  • Definisi properti filter

    "filter": ["removepunct"]
    Catatan

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

  • Hasil penyaringan

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

Properti konfigurasi filter sama dengan tokenizer Pinyin.