Inverted index adalah teknik pengambilan informasi umum yang memisahkan teks menjadi token untuk menemukan dokumen yang berisi token tersebut secara cepat. ApsaraDB for SelectDB mendukung inverted index, yang dapat digunakan untuk pencarian teks penuh pada kolom string serta kueri kesetaraan atau rentang pada kolom numerik dan tanggal. Inverted index membantu menyaring volume data besar secara cepat untuk menemukan baris yang cocok. Topik ini menjelaskan fitur inverted index ApsaraDB for SelectDB serta cara membuat dan menggunakannya.
Prinsip Indeks
Pada ApsaraDB for SelectDB, setiap baris dalam tabel merepresentasikan satu dokumen, dan setiap kolom merepresentasikan satu bidang dalam dokumen tersebut. Inverted index memungkinkan Anda menemukan baris yang berisi kata kunci tertentu dengan cepat, sehingga meningkatkan efisiensi penyaringan klausa WHERE.
Berbeda dengan indeks biasa, inverted index menyimpan data dalam file terbalik terpisah. File-file ini hanya memiliki hubungan logis dengan file data utama (segment), bukan integrasi fisik. Desain ini berarti pembaruan atau penghapusan inverted index tidak memerlukan penulisan ulang file data utama, sehingga beban pemrosesan turun secara signifikan.
Kasus Penggunaan
Mempercepat pencarian teks penuh pada kolom string.
Mempercepat penyaringan pada kolom string, numerik, dan datetime menggunakan
=, !=, >, >=, <, <=.
Manfaat
Dukungan untuk kombinasi logika yang kaya.
Mendorong logika OR dan
NOTke lapisan indeks.Mendukung kombinasi arbitrer dari AND, OR, dan
NOTdi antara beberapa kondisi.
Manajemen indeks yang fleksibel dan cepat.
Membuat inverted index saat membuat tabel.
Menambahkan inverted index ke tabel yang sudah ada.
Menghapus inverted index yang ada dari tabel.
Batasan
Tipe FLOAT dan DOUBLE tidak didukung karena masalah presisi floating-point. Gunakan DECIMAL sebagai gantinya. DECIMAL mendukung inverted index.
Beberapa tipe data kompleks tidak didukung: MAP, STRUCT, JSON, HLL, BITMAP, QUANTILE_STATE, dan AGG_STATE. Untuk JSON, gunakan VARIANT.
Anda dapat membuat inverted index pada kolom numerik, tetapi tidak dapat menentukan parser tokenizer seperti english, chinese, atau unicode.
Tabel DUPLICATE dan tabel UNIQUE dengan Merge-on-Write yang diaktifkan mendukung inverted index pada kolom apa pun. Namun, tabel AGGREGATE dan tabel UNIQUE tanpa Merge-on-Write hanya mendukung inverted index pada kolom kunci. Kolom non-kunci tidak mendukung inverted index pada model-model ini karena harus membaca seluruh data sebelum melakukan penggabungan, sehingga tidak dapat menggunakan indeks untuk penyaringan awal.
Membuat Indeks
Anda dapat membuat inverted index dengan dua cara: saat pembuatan tabel atau setelahnya pada tabel yang sudah ada.
Membuat indeks saat membuat tabel
Ini adalah operasi sinkron. Indeks siap digunakan segera setelah tabel dibuat.
Inverted index memiliki batasan berbeda di tiap model data:
Model Aggregate: Anda hanya dapat membuat inverted index pada kolom kunci.
Model Unique: Anda harus mengaktifkan Merge on Write. Setelah diaktifkan, Anda dapat membuat inverted index pada kolom apa pun.
Model Duplicate: Anda dapat membuat inverted index pada kolom apa pun.
Sintaks
CREATE TABLE [IF NOT EXISTS] [db_name.]<table_name>
(
<column_definition_list>,
[<index_definition_list>]
)
table_properties;Parameter
Parameter pembuatan tabel
Parameter | Wajib | Deskripsi |
db_name | Tidak | Nama database target. |
table_name | Ya | Nama tabel target. |
column_definition_list | Ya | Daftar definisi kolom. Untuk detail lebih lanjut, lihat CREATE-TABLE. |
table_properties | Ya | Properti tabel, seperti model data, partisi, dan bucketing. Untuk detail lebih lanjut, lihat Data Model. |
index_definition_list | Tidak | Daftar definisi indeks. |
Sintaks index_definition_list
Anda dapat mendefinisikan beberapa indeks saat membuat tabel. Format: index_definition[, index_definition][, index_definition]....
index_definition Definisi
INDEX <index_name>(<column_name>) <index_type> [PROPERTIES("<key>" = "<value>")] [COMMENT '<comment>']parameter definisi indeks
Parameter wajib
Nama parameter | Deskripsi |
index_name | Nama indeks. |
column_name | Nama kolom yang diindeks. |
index_type | Jenis indeks. Selalu tulis |
Parameter opsional
PROPERTIES
PROPERTIES menentukan apakah kolom akan ditokenisasi. Properti ini berisi satu atau lebih pasangan kunci-nilai dalam format "<key>" = "<value>", dipisahkan koma. Jika Anda tidak yakin bagaimana string teks akan ditokenisasi, gunakan fungsi TOKENIZE untuk memeriksa. Untuk detail lebih lanjut, lihat Fungsi Tokenisasi.
Kunci | Nilai |
parser | Menentukan tokenizer. Secara default, tidak ada tokenizer yang diterapkan. Kolom numerik tidak mendukung properti ini.
|
parser_mode | Menentukan granularitas tokenisasi. Semua tokenizer secara default menggunakan mode coarse-grained. Mode coarse-grained lebih memilih token yang lebih panjang. Misalnya, Ketika Jika Anda tidak yakin cara kerja tokenisasi, lihat Fungsi Tokenisasi. |
support_phrase | Mengaktifkan akselerasi kueri frasa menggunakan MATCH_PHRASE. Nilai default adalah false.
|
char_filter | Memproses string sebelum tokenisasi. Hanya char_replace yang didukung. char_replace mengganti setiap karakter dalam pattern dengan karakter pengganti yang sesuai.
|
ignore_above | Panjang maksimum untuk indeks string non-tokenisasi (ketika
|
lower_case | Mengonversi token menjadi huruf kecil untuk pencocokan case-insensitive.
|
stopwords | Menentukan daftar stopword yang memengaruhi tokenisasi.
|
dict_compression | Mengaktifkan kompresi kamus ZSTD untuk kamus inverted index.
Catatan Hanya didukung pada versi 4.1.0 dan seterusnya. |
COMMENT
Nama parameter | Deskripsi |
comment | Deskripsi indeks. |
Contoh pembuatan tabel dan indeks
-- Membuat inverted index bernama idx_comment pada kolom comment
-- USING INVERTED menetapkan jenis indeks menjadi inverted index
-- PROPERTIES("parser" = "english") menggunakan tokenisasi bahasa Inggris. Juga mendukung "chinese" dan "unicode". Menghilangkan "parser" menonaktifkan tokenisasi.
CREATE TABLE hackernews_1m
(
`id` BIGINT,
`deleted` TINYINT,
`type` String,
`author` String,
`timestamp` DateTimeV2,
`comment` String,
`dead` TINYINT,
`parent` BIGINT,
`poll` BIGINT,
`children` Array<BIGINT>,
`url` String,
`score` INT,
`title` String,
`parts` Array<INT>,
`descendants` INT,
INDEX idx_comment (`comment`) USING INVERTED PROPERTIES("parser" = "english") COMMENT 'inverted index for comment'
)
DUPLICATE KEY(`id`)
DISTRIBUTED BY HASH(`id`) BUCKETS 10;Menambahkan indeks ke tabel yang sudah ada
Ini adalah operasi asinkron. Periksa progres dengan SHOW ALTER TABLE COLUMN;.
Sintaks
ALTER TABLE <table_name> ADD INDEX <index_name>(<column_name>) <index_type> [PROPERTIES("<key>" = "<value>")];Parameter
Sama seperti saat pembuatan tabel.
Contoh
Tambahkan indeks tanpa tokenisasi.
ALTER TABLE user_tb ADD INDEX index_userId(user_id) USING INVERTED ;Tambahkan indeks yang menggunakan metode tokenisasi english.
ALTER TABLE user_tb ADD INDEX index_city(city) USING INVERTED PROPERTIES("parser" = "english");Menampilkan indeks
Memeriksa progres perubahan indeks
Perubahan indeks menggunakan ALTER atau DROP bersifat asinkron. Periksa progres dengan pernyataan ini.
SHOW ALTER TABLE COLUMN;Menampilkan semua indeks untuk suatu tabel
Sintaks
SHOW INDEXES FROM <table_name>;Contoh
SHOW INDEXES FROM user_tb;Menghapus indeks
Penghapusan indeks bersifat asinkron. Untuk memeriksa progres, lihat Menampilkan indeks.
Menghapus indeks dapat mengurangi performa kueri. Lakukan dengan hati-hati.
Sintaks
-- Sintaks 1
DROP INDEX <index_name> ON <table_name>;
-- Sintaks 2
ALTER TABLE <table_name> DROP INDEX <index_name>;Contoh
DROP INDEX index_userId ON user_tb;
ALTER TABLE user_tb DROP INDEX index_city;Menggunakan inverted index
Pencarian teks penuh
Sintaks
SELECT * FROM <table_name> WHERE <column_name> <conditional_logic> '<keywords>';Parameter
Parameter | Wajib | Deskripsi |
table_name | Ya | Nama tabel target. |
column_name | Ya | Nama kolom target. |
conditional_logic | Ya | Logika pencocokan: Kombinasi bebas kata kunci dan operator logika. Operator logika: AND, OR, Kata kunci pencarian teks penuh:
|
keywords | Ya | Kata kunci target. Pisahkan beberapa kata kunci dengan spasi. Contoh: |
Contoh
-- Temukan semua baris di log_tb di mana logmsg berisi keyword1.
SELECT * FROM log_tb WHERE logmsg MATCH_ANY 'keyword1';
-- Temukan semua baris di log_tb di mana logmsg berisi keyword1 atau keyword2.
SELECT * FROM log_tb WHERE logmsg MATCH_ANY 'keyword1 keyword2';
-- Temukan semua baris di log_tb di mana logmsg berisi keyword1 dan keyword2.
SELECT * FROM log_tb WHERE logmsg MATCH_ALL 'keyword1 keyword2';
-- Temukan semua baris di log_tb di mana logmsg berisi keyword1 dan keyword2 secara berurutan.
SELECT * FROM log_tb WHERE logmsg MATCH_PHRASE 'keyword1 keyword2';Kueri kesetaraan dan rentang pada kolom numerik dan tanggal
Sintaks kueri identik dengan SQL standar.
Contoh
-- Kueri kesetaraan, rentang, IN, dan NOT IN
SELECT * FROM user_tb WHERE id = 123;
SELECT * FROM user_tb WHERE ts > '2023-01-01 00:00:00';
SELECT * FROM user_tb WHERE op_type IN ('add', 'delete');Perbandingan performa kueri
Kami menguji performa kueri menggunakan 1 juta baris dari dataset hackernews, membandingkan kueri dengan dan tanpa inverted index.
Pengaturan lingkungan
Langkah 1: Buat tabel target.
Buat database.
CREATE DATABASE test_inverted_index;Beralih ke database baru.
USE test_inverted_index;Buat tabel target.
CREATE TABLE hackernews_1m ( `id` BIGINT, `deleted` TINYINT, `type` String, `author` String, `timestamp` DateTimeV2, `comment` String, `dead` TINYINT, `parent` BIGINT, `poll` BIGINT, `children` Array<BIGINT>, `url` String, `score` INT, `title` String, `parts` Array<INT>, `descendants` INT, INDEX idx_comment (`comment`) USING INVERTED PROPERTIES("parser" = "english") COMMENT 'inverted index for comment' ) DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 10; -- Membuat inverted index bernama idx_comment pada kolom comment -- USING INVERTED menetapkan jenis indeks menjadi inverted index -- PROPERTIES("parser" = "english") menggunakan tokenisasi bahasa Inggris. Juga mendukung "chinese" dan "unicode". Menghilangkan "parser" menonaktifkan tokenisasi
Langkah 2: Impor data
Impor data ke tabel target.
Unduh file data.
wget https://qa-build.oss-cn-beijing.aliyuncs.com/regression/index/hacknernews_1m.csv.gzImpor data menggunakan Stream Load.
Pada halaman detail instans ApsaraDB for SelectDB, Anda dapat melihat alamat koneksi (host) dan nomor port (port) instans ApsaraDB for SelectDB. Untuk informasi lebih lanjut tentang Stream Load, lihat Stream Load.
curl --location-trusted -u root: -H "compress_type:gz" -T hacknernews_1m.csv.gz http://<host>:<port>/api/test_inverted_index/hackernews_1m/_stream_load { "TxnId": 2, "Label": "a8a3e802-2329-49e8-912b-04c800a461a6", "TwoPhaseCommit": "false", "Status": "Success", "Message": "OK", "NumberTotalRows": 1000000, "NumberLoadedRows": 1000000, "NumberFilteredRows": 0, "NumberUnselectedRows": 0, "LoadBytes": 130618406, "LoadTimeMs": 8988, "BeginTxnTimeMs": 23, "StreamLoadPutTimeMs": 113, "ReadDataTimeMs": 4788, "WriteDataTimeMs": 8811, "CommitAndPublishTimeMs": 38 }Jalankan
count()untuk memastikan impor berhasil.SELECT count() FROM hackernews_1m; +---------+ | count() | +---------+ | 1000000 | +---------+ 1 row in set (0.02 sec)
Perbandingan performa
Hasil berbeda antara inverted index bertokenisasi dan tanpa inverted index. Tokenisasi menormalisasi token—misalnya, mengonversi ke huruf kecil—sehingga hasil kueri inverted index mungkin sedikit lebih tinggi.
Beberapa contoh menunjukkan perbedaan performa kecil karena dataset kecil. Dataset yang lebih besar menunjukkan perbedaan lebih besar.
Pencarian teks penuh
Hitung baris di mana kolom comment berisi
OLAP.Menghitung jumlah baris di kolom `comment` yang berisi
OLAPmenggunakan operator `LIKE` membutuhkan waktu 0,18 detik.SELECT count() FROM hackernews_1m WHERE comment LIKE '%OLAP%'; +---------+ | count() | +---------+ | 34 | +---------+ 1 row in set (0.18 sec)Pencarian teks penuh berbasis inverted index menggunakan
MATCH_ANYuntuk menghitung jumlah baris yang berisiOLAPdi kolom comment membutuhkan waktu 0,02 detik, yaitu 9 kali lebih cepat daripada penghitungan berbasis LIKE.SELECT count() FROM hackernews_1m WHERE comment MATCH_ANY 'OLAP'; +---------+ | count() | +---------+ | 35 | +---------+ 1 row in set (0.02 sec)
Hitung baris di mana kolom comment berisi
OLTP.Menggunakan LIKE untuk menghitung baris di kolom comment yang berisi
OLTPmembutuhkan waktu 0,07 detik.SELECT count() FROM hackernews_1m WHERE comment LIKE '%OLTP%'; +---------+ | count() | +---------+ | 48 | +---------+ 1 row in set (0.07 sec)Pencarian teks penuh berbasis inverted index menggunakan
MATCH_ANYmenghitung jumlah baris di kolom comment yang berisiOLTP, membutuhkan waktu 0,01 detik. Ini 7 kali lebih cepat daripada penghitungan berbasis LIKE.SELECT count() FROM hackernews_1m WHERE comment MATCH_ANY 'OLTP'; +---------+ | count() | +---------+ | 51 | +---------+ 1 row in set (0.01 sec)
Hitung baris di mana kolom comment berisi
OLAPdanOLTP.Menggunakan LIKE: 0,13 detik.
SELECT count() FROM hackernews_1m WHERE comment LIKE '%OLAP%' AND comment LIKE '%OLTP%'; +---------+ | count() | +---------+ | 14 | +---------+ 1 row in set (0.13 sec)Pencarian teks penuh berbasis inverted index menggunakan
MATCH_ALLmembutuhkan waktu 0,01 detik. Metode ini 12 kali lebih cepat daripada statistik berbasis LIKE.SELECT count() FROM hackernews_1m WHERE comment MATCH_ALL 'OLAP OLTP'; +---------+ | count() | +---------+ | 15 | +---------+ 1 row in set (0.01 sec)
Hitung baris di mana kolom comment berisi
OLAPatauOLTP.Menggunakan LIKE: 0,12 detik.
SELECT count() FROM hackernews_1m WHERE comment LIKE '%OLAP%' OR comment LIKE '%OLTP%'; +---------+ | count() | +---------+ | 68 | +---------+ 1 row in set (0.12 sec)Indeks teks penuh melakukan penghitungan statistik dalam 0,01 detik, yaitu 12 kali lebih cepat daripada kueri LIKE.
SELECT count() FROM hackernews_1m WHERE comment MATCH_ANY 'OLAP OLTP'; +---------+ | count() | +---------+ | 71 | +---------+ 1 row in set (0.01 sec)
Kueri kesetaraan dan rentang
Performa kueri rentang pada kolom DateTime.
Sebelum membuat inverted index, hitung baris di mana timestamp >
2007-08-23 04:17:00. Waktu: 0,03 detik.SELECT count() FROM hackernews_1m WHERE timestamp > '2007-08-23 04:17:00'; +---------+ | count() | +---------+ | 999081 | +---------+ 1 row in set (0.03 sec)Buat inverted index pada kolom timestamp.
CREATE INDEX idx_timestamp ON hackernews_1m(timestamp) USING INVERTED; Query OK, 0 rows affected (0.03 sec)Periksa progres pembuatan indeks. Selisih antara FinishTime dan CreateTime menunjukkan bahwa pembuatan indeks pada 1 juta baris hanya membutuhkan waktu 1 detik.
SHOW ALTER TABLE COLUMN; +-------+---------------+-------------------------+-------------------------+---------------+---------+---------------+---------------+---------------+----------+------+----------+---------+ | JobId | TableName | CreateTime | FinishTime | IndexName | IndexId | OriginIndexId | SchemaVersion | TransactionId | State | Msg | Progress | Timeout | +-------+---------------+-------------------------+-------------------------+---------------+---------+---------------+---------------+---------------+----------+------+----------+---------+ | 10030 | hackernews_1m | 2023-02-10 19:44:12.929 | 2023-02-10 19:44:13.938 | hackernews_1m | 10031 | 10008 | 1:1994690496 | 3 | FINISHED | | NULL | 2592000 | +-------+---------------+-------------------------+-------------------------+---------------+---------+---------------+---------------+---------------+----------+------+----------+---------+ 1 row in set (0.00 sec)Setelah indeks dibuat, menggunakan pernyataan kueri yang sama untuk menghitung baris di mana kolom timestamp lebih besar dari
2007-08-23 04:17:00membutuhkan waktu 0,01 detik. Kueri ini 2 kali lebih cepat daripada sebelum inverted index dibuat.SELECT count() FROM hackernews_1m WHERE timestamp > '2007-08-23 04:17:00'; +---------+ | count() | +---------+ | 999081 | +---------+ 1 row in set (0.01 sec)
Performa kueri kesetaraan pada kolom numerik.
Sebelum membuat inverted index, hitung baris di mana parent = 11189.
SELECT count() FROM hackernews_1m WHERE parent = 11189; +---------+ | count() | +---------+ | 2 | +---------+ 1 row in set (0.01 sec)Buat inverted index pada kolom parent tanpa tokenisasi.
-- Untuk tipe numerik, USING INVERTED tidak memerlukan tokenizer -- ALTER TABLE t ADD INDEX adalah sintaks kedua untuk menambahkan indeks ALTER TABLE hackernews_1m ADD INDEX idx_parent(parent) USING INVERTED; Query OK, 0 rows affected (0.01 sec)Periksa progres pembuatan indeks.
SHOW ALTER TABLE COLUMN; +-------+---------------+-------------------------+-------------------------+---------------+---------+---------------+---------------+---------------+----------+------+----------+---------+ | JobId | TableName | CreateTime | FinishTime | IndexName | IndexId | OriginIndexId | SchemaVersion | TransactionId | State | Msg | Progress | Timeout | +-------+---------------+-------------------------+-------------------------+---------------+---------+---------------+---------------+---------------+----------+------+----------+---------+ | 10030 | hackernews_1m | 2023-02-10 19:44:12.929 | 2023-02-10 19:44:13.938 | hackernews_1m | 10031 | 10008 | 1:1994690496 | 3 | FINISHED | | NULL | 2592000 | | 10053 | hackernews_1m | 2023-02-10 19:49:32.893 | 2023-02-10 19:49:33.982 | hackernews_1m | 10054 | 10008 | 1:378856428 | 4 | FINISHED | | NULL | 2592000 | +-------+---------------+-------------------------+-------------------------+---------------+---------+---------------+---------------+---------------+----------+------+----------+---------+Setelah indeks dibuat, gunakan pernyataan kueri yang sama untuk menghitung baris di mana kolom numerik parent sama dengan 11189.
SELECT count() FROM hackernews_1m WHERE parent = 11189; +---------+ | count() | +---------+ | 2 | +---------+ 1 row in set (0.01 sec)
Performa kueri kesetaraan pada kolom string.
Sebelum membuat inverted index, hitung baris di mana author = 'faster'. Waktu: 0,03 detik.
SELECT count() FROM hackernews_1m WHERE author = 'faster'; +---------+ | count() | +---------+ | 20 | +---------+ 1 row in set (0.03 sec)Buat inverted index pada kolom author tanpa tokenisasi.
-- Hanya menggunakan USING INVERTED. Memperlakukan seluruh string sebagai satu token. ALTER TABLE hackernews_1m ADD INDEX idx_author(author) USING INVERTED; Query OK, 0 rows affected (0.01 sec)Periksa progres pembuatan indeks.
-- Membangun indeks pada 1 juta nilai author hanya membutuhkan waktu 1,5 detik. SHOW ALTER TABLE COLUMN; +-------+---------------+-------------------------+-------------------------+---------------+---------+---------------+---------------+---------------+----------+------+----------+---------+ | JobId | TableName | CreateTime | FinishTime | IndexName | IndexId | OriginIndexId | SchemaVersion | TransactionId | State | Msg | Progress | Timeout | +-------+---------------+-------------------------+-------------------------+---------------+---------+---------------+---------------+---------------+----------+------+----------+---------+ | 10030 | hackernews_1m | 2023-02-10 19:44:12.929 | 2023-02-10 19:44:13.938 | hackernews_1m | 10031 | 10008 | 1:1994690496 | 3 | FINISHED | | NULL | 2592000 | | 10053 | hackernews_1m | 2023-02-10 19:49:32.893 | 2023-02-10 19:49:33.982 | hackernews_1m | 10054 | 10008 | 1:378856428 | 4 | FINISHED | | NULL | 2592000 | | 10076 | hackernews_1m | 2023-02-10 19:54:20.046 | 2023-02-10 19:54:21.521 | hackernews_1m | 10077 | 10008 | 1:1335127701 | 5 | FINISHED | | NULL | 2592000 | +-------+---------------+-------------------------+-------------------------+---------------+---------+---------------+---------------+---------------+----------+------+----------+---------+Setelah Indeks terbalik dibuat, gunakan Pernyataan kueri yang sama untuk menghitung baris di mana kolom string author bernilai faster. Operasi ini memerlukan waktu 0,01 detik, atau 2 detik lebih cepat dibandingkan kueri yang sama sebelum Indeks terbalik dibuat.
-- Pencocokan kesetaraan string mengalami percepatan signifikan setelah pembuatan indeks. SELECT count() FROM hackernews_1m WHERE author = 'faster'; +---------+ | count() | +---------+ | 20 | +---------+ 1 row in set (0.01 sec)
Fungsi Tokenisasi
Fungsi tokenisasi memisahkan teks kontinu menjadi token atau frasa individual. Fungsi ini merupakan inti dari pembuatan dan penggunaan inverted index. Kualitas dan metode tokenisasi secara langsung memengaruhi kualitas dan performa indeks.
Jika Anda tidak yakin bagaimana string teks akan ditokenisasi, gunakan fungsi TOKENIZE untuk memeriksa. TOKENIZE menerima dua parameter utama: parser dan parser_mode. Deskripsinya sebagai berikut.
Parameter | Deskripsi |
| Menentukan tokenizer. Secara default, tidak ada tokenizer yang diterapkan.
|
| Menentukan pola tokenisasi karena granularitas tokenisasi bergantung pada pola tersebut. Semua tokenizer secara default menggunakan mode coarse-grained. Mode coarse-grained lebih memilih token yang lebih panjang. Misalnya, Ketika |
Contoh berikut.
-- Hasil tokenisasi bahasa Inggris.
SELECT TOKENIZE('I love CHINA','"parser"="english"');
+------------------------------------------------+
| tokenize('I love CHINA', '"parser"="english"') |
+------------------------------------------------+
| ["i", "love", "china"] |
+------------------------------------------------+
1 row in set (0.02 sec)
-- Hasil tokenisasi fine-grained dari tokenizer bahasa Tionghoa.
SELECT TOKENIZE('武汉长江大桥','"parser"="chinese","parser_mode"="fine_grained"');
+-----------------------------------------------------------------------------------+
| tokenize('武汉长江大桥', '"parser"="chinese","parser_mode"="fine_grained"') |
+-----------------------------------------------------------------------------------+
| ["武汉", "武汉长江大桥", "长江", "长江大桥", "大桥"] |
+-----------------------------------------------------------------------------------+
1 row in set (0.02 sec)
-- Hasil tokenisasi coarse-grained dari tokenizer bahasa Tionghoa.
SELECT TOKENIZE('武汉市长江大桥','"parser"="chinese","parser_mode"="coarse_grained"');
+----------------------------------------------------------------------------------------+
| tokenize('武汉市长江大桥', '"parser"="chinese","parser_mode"="coarse_grained"') |
+----------------------------------------------------------------------------------------+
| ["武汉市", "长江大桥"] |
+----------------------------------------------------------------------------------------+
1 row in set (0.02 sec)
-- Hasil tokenisasi campuran multibahasa.
SELECT TOKENIZE('I love CHINA 我爱我的祖国','"parser"="unicode"');
+-------------------------------------------------------------------+
| tokenize('I love CHINA 我爱我的祖国', '"parser"="unicode"') |
+-------------------------------------------------------------------+
| ["i", "love", "china", "我", "爱", "我", "的", "祖", "国"] |
+-------------------------------------------------------------------+
1 row in set (0.02 sec)