All Products
Search
Document Center

PolarDB:Panduan Pengguna Indeks Teks Penuh IMCI

Last Updated:Aug 05, 2026

Dokumen ini menjelaskan cara membuat dan menggunakan indeks teks penuh pada In-Memory Column Index (IMCI) PolarDB for MySQL. Dengan mengonfigurasi indeks terbalik melalui COMMENT tingkat kolom, Anda dapat memanfaatkan sintaks MATCH...AGAINST atau kueri LIKE yang dioptimalkan secara otomatis untuk mencapai pencarian fuzzy dalam hitungan milidetik. Fitur ini didasarkan pada mekanisme indeks terbalik dan pencocokan kata kunci IMCI. Untuk prinsip detailnya, lihat Analisis fitur pencarian teks penuh dalam IMCI.

Persyaratan versi

Versi kluster Anda harus memenuhi persyaratan berikut:

  • MySQL 8.0.1, dan versi minor harus 8.0.1.1.52 atau lebih baru.

  • MySQL 8.0.2, dan versi minor harus 8.0.2.2.32 atau lebih baru.

Sintaks

PolarDB IMCI memungkinkan Anda membuat, memodifikasi, atau menghapus indeks terbalik dengan menentukan comment kolom saat membuat tabel atau memodifikasi comment kolom melalui DDL.

Sintaks

  • Definisikan indeks teks penuh saat membuat tabel:

    CREATE TABLE table_name (
        column_name Data_Type COMMENT "imci_fts(type=VALUE [,KEY=VALUE])"
    ) COMMENT 'columnar=1';
  • Gunakan ALTER untuk memodifikasi kolom guna menambahkan atau mengubah indeks:

    ALTER TABLE table_name MODIFY column_name Data_Type COMMENT "imci_fts(type=VALUE [,KEY=VALUE])";
    Penting

    Memodifikasi COMMENT dapat memicu pembangunan ulang indeks terbalik. Untuk tabel besar, kami menyarankan Anda melakukan operasi ini selama jam sepi.

  • Gunakan ALTER untuk memodifikasi kolom guna menghapus indeks:

    ALTER TABLE table_name MODIFY column_name Data_Type COMMENT 'imci_fts(enable=0)';

Parameter

Anda harus mengatur COMMENT menjadi 'columnar=1' pada tingkat tabel untuk membuat tabel penyimpanan kolom IMCI. Indeks teks penuh dikonfigurasi melalui COMMENT kolom dalam format imci_fts(TYPE=VALUE[, KEY=VALUE]...), di mana TYPE wajib dan KEY opsional. Beberapa pasangan KEY dipisahkan dengan koma.

  • Jenis tokenizer (parameter type):

    Tokenizer

    type value

    Deskripsi

    token

    0 (default)

    Memisahkan teks berdasarkan karakter non-alfanumerik seperti spasi dan tanda baca. Cocok untuk teks bahasa Inggris atau teks terformat.

    ngram

    1

    Memisahkan teks menjadi potongan karakter dengan panjang tetap (dikontrol oleh parameter len). Cocok untuk pencocokan kabur lintas bahasa apa pun.

    jieba

    2

    Tokenizer bahasa Mandarin berbasis kamus. Cocok untuk pencarian semantik bahasa Mandarin.

    ik

    3

    Tokenizer bahasa Mandarin lain yang banyak digunakan.

    json

    4

    Mengekstrak konten dari bidang JSON menggunakan ekspresi JSONPath (memerlukan parameter expr) untuk membangun indeks.

    whole

    5

    Tidak memisahkan teks. Seluruh kolom diperlakukan sebagai satu kata kunci. Terutama digunakan untuk mempercepat kueri kesamaan (seperti = atau IN).

    mysql ngram

    6

    Tokenizer ngram yang kompatibel dengan MySQL.

  • Parameter konfigurasi (KEY-VALUE):

    Parameter (KEY)

    Default

    Deskripsi

    Jenis tokenizer yang berlaku (type)

    enable

    1

    • 1: Membuat indeks terbalik (default)

    • 0: Menghapus indeks terbalik

    Semua

    type

    0

    Menentukan jenis tokenizer (lihat tabel di atas)

    Semua

    len

    -

    Panjang token untuk tokenizer ngram. Rentang valid: [1, 256)

    type=1 (ngram), type=6 (mysql ngram)

    mode

    0

    Mode tokenizer:

    • jieba (type=2):

      • 0: Mode akurat (default)

      • 1: Mode penuh

      • 2: Mode mesin pencari

    • ik (type=3):

      • 0: Mode cerdas (default)

      • 1: Mode detail paling halus

    • json (type=4):

      • 0: Mode array lama (default)

      • 1: Mode array

      • 2: Mode pasangan kunci-nilai, seperti "*.id", "[*].id", dll.

    type=2, 3, 4

    score

    0

    Apakah mendukung pengurutan:

    • 0: Menonaktifkan pembuatan frekuensi kata kunci (TF) dan frekuensi dokumen (DF), mengabaikan pengurutan (default)

    • 1: Mengaktifkan pengurutan skor relevansi untuk MATCH ... AGAINST

    Semua

    seg_size

    0

    Menentukan ukuran segmen indeks terbalik:

    • 0: Menggunakan nilai variabel sistem imci_fts_build_segment_size

    • Nilai lain: Menentukan ukuran segmen eksak

    Semua

    pack_cnt_min

    0

    Jumlah minimum unit data untuk pembuatan indeks terbalik:

    • 0: Menggunakan nilai variabel sistem imci_fts_build_packcnt_min

    • Nilai lain: Menentukan nilai eksak

    Semua

    pack_cnt_max

    0

    Jumlah maksimum unit data untuk pembuatan indeks terbalik:

    • 0: Menggunakan nilai variabel sistem imci_fts_build_packcnt_max

    • Nilai lain: Menentukan nilai eksak

    Semua

    stop_word

    0

    Apakah mendukung stop words:

    • 0: Tidak didukung (default)

    • 1: Didukung

    Semua

    case_sensitive

    0

    Apakah pencocokan peka huruf besar/kecil:

    • 0: Tidak peka huruf besar/kecil (default)

    • 1: Peka huruf besar/kecil

    • 2: Ditentukan oleh pengaturan collate kolom (mode kompatibel MySQL)

    • 3: Sepenuhnya ditentukan oleh pengaturan collate kolom (sepenuhnya dikontrol oleh collate)

    Semua

    phrase

    0

    Apakah merekam informasi posisi untuk kueri frasa:

    • 0: Tidak merekam informasi posisi (default)

    • 1: Merekam informasi posisi

    Semua

    synonym

    0

    Apakah mendukung sinonim:

    • 0: Tidak didukung (default)

    • 1: Didukung, mode kueri

    • 2: Didukung, mode indeks (memerlukan pembangunan ulang indeks terbalik)

    Semua

Contoh

1: Membuat indeks teks penuh

Buat indeks teks penuh pada kolom yang memerlukan pencarian teks, dan pilih tokenizer berdasarkan kebutuhan bisnis Anda.

  1. Buat tabel uji: Buat tabel dengan indeks penyimpanan kolom.

    CREATE TABLE t1 (
        id INT PRIMARY KEY,
        title VARCHAR(32) COMMENT "imci_fts(type=2)"
    )CHARSET utf8mb4 COMMENT 'columnar=1';
  2. (Opsional) Modifikasi indeks teks penuh: Gunakan pernyataan ALTER TABLE untuk menambahkan indeks teks penuh ke kolom title dan menentukan mode mesin pencari tokenizer jieba.

    ALTER TABLE t1 MODIFY title VARCHAR(32) COMMENT "imci_fts(type=2,mode=0)";
  3. (Opsional) Verifikasi hasil tokenisasi: Sebelum memilih tokenizer, Anda dapat menggunakan fungsi dbms_imci.fts_tokenize untuk melihat pratinjau bagaimana tokenizer berbeda memproses teks.

    CALL dbms_imci.fts_tokenize("I am PolarDB");
    -- Hasil: ["i", "am", "polardb"]  
    
    CALL dbms_imci.fts_tokenize("I am PolarDB", "type=1");
    -- Hasil: ["i ", " a", "am", "m ", " p", "po", "ol", "ar", "rd", "db"]
    
    CALL dbms_imci.fts_tokenize("I am PolarDB", "type=2");
    -- Hasil: ["PolarDB"]
    
    CALL dbms_imci.fts_tokenize("I am PolarDB", "type=2,mode=1");
    -- Hasil: ["polardb"]

2: Menjalankan kueri pencarian teks penuh

Setelah indeks dibuat, IMCI membangunnya di latar belakang. Setelah pembangunan selesai, Anda dapat menjalankan kueri teks menggunakan pernyataan MATCH...AGAINST atau LIKE yang dioptimalkan.

  1. Gunakan kueri MATCH...AGAINST:

    -- Masukkan data sampel
    INSERT INTO t1 VALUES 
    (16, 'polarDB full-text index feature title'), 
    (17, 'database title performance optimization');
    -- Temukan baris di mana kolom title berisi "title"
    SELECT * FROM t1 WHERE MATCH(title) AGAINST("title");

    Gunakan EXPLAIN untuk melihat rencana eksekusi. Jika operator FtsTableScan muncul, kueri telah mengenai indeks teks penuh.

    EXPLAIN SELECT * FROM t1 WHERE MATCH(title) AGAINST("title") AND id > 10;
    +----+------------------------+------+-----------------------------------------------------------------+
    | ID | Operator               | Name | Extra Info                                                      |
    +----+------------------------+------+-----------------------------------------------------------------+
    |  1 | Select Statement       |      | IMCI Execution Plan (max_dop = 32, max_query_mem = 41230008320) |
    |  2 | └─Compute Scalar       |      |                                                                 |
    |  3 |   └─FILTER             |      | Cond:(t1.id > 10)                                              |
    |  4 |     └─FtsTableScan     | t1   | Term:("title") Fallback:(t1.title LIKE "%title%")             |
    +----+------------------------+------+-----------------------------------------------------------------+

    Fallback menunjukkan bahwa untuk data inkremental yang belum diindeks, sistem secara otomatis menggunakan pemindaian tambahan LIKE untuk memastikan kelengkapan hasil.

  2. Percepat kueri LIKE: Untuk kompatibilitas dengan kode aplikasi yang ada, IMCI mendukung konversi otomatis kueri LIKE tertentu menjadi MATCH...AGAINST untuk percepatan.

    SET imci_convert_like_to_match = on;
    EXPLAIN SELECT * FROM t1 WHERE title  LIKE "%title%";
    +----+------------------------+------+-----------------------------------------------------------------+
    | ID | Operator               | Name | Extra Info                                                      |
    +----+------------------------+------+-----------------------------------------------------------------+
    |  1 | Select Statement       |      | IMCI Execution Plan (max_dop = 32, max_query_mem = 41230008320) |
    |  2 | └─Compute Scalar       |      |                                                                 |
    |  3 |   └─FILTER             |      | Cond:(t1.title LIKE "%title%")                                 |
    |  4 |     └─FtsTableScan     | t1   | Term:("title") Fallback:(t1.title LIKE "%title%")             |
    +----+------------------------+------+-----------------------------------------------------------------+

    Rencana eksekusi juga menampilkan operator FtsTableScan, yang mengonfirmasi bahwa kueri LIKE telah berhasil dipercepat.

  3. Konversi MATCH ke LIKE: Ketika tidak ada indeks teks penuh, untuk memastikan kueri tetap berjalan dengan benar sambil memanfaatkan indeks yang ada sebanyak mungkin, IMCI dapat mengonversi MATCH menjadi LIKE, dan rencana eksekusi menunjukkan pemindaian tabel penuh.

    SET imci_enable_query_fts_like = on;
    EXPLAIN SELECT * FROM t1 WHERE MATCH(title) AGAINST("title");
    +----+----------------------+------+-----------------------------------------------------------------+
    | ID | Operator             | Name | Extra Info                                                      |
    +----+----------------------+------+-----------------------------------------------------------------+
    |  1 | Select Statement     |      | IMCI Execution Plan (max_dop = 32, max_query_mem = 41230008320) |
    |  2 | └─Compute Scalar     |      |                                                                 |
    |  3 |   └─Table Scan       | t1   | Cond:(title LIKE "%title%")                                    |
    +----+----------------------+------+-----------------------------------------------------------------+

3: Mengelola dan memantau indeks

Kueri status pembangunan dan metadata indeks, serta hapus indeks ketika tidak lagi diperlukan.

  1. Pantau progres dan status pembangunan indeks:

    -- Lihat semua indeks terbalik
    SHOW imci indexes fulltext;
    SELECT * FROM information_schema.imci_fts_indexes;
    
    -- Lihat indeks terbalik tertentu
    SHOW imci indexes fulltext FOR [db_name].[table_name];
    SELECT * FROM information_schema.imci_fts_indexes 
    WHERE schema_name='[db_name]' AND table_name='[table_name]';
    
    -- Lihat metadata indeks terbalik tertentu
    SELECT * FROM information_schema.imci_fts_index_metas 
    WHERE schema_name='[db_name]' AND table_name='[table_name]' AND column_name='[column_name]';
    
    -- Lihat data segmen indeks terbalik tertentu
    SELECT * FROM information_schema.imci_fts_index_segs 
    WHERE schema_name='[db_name]' AND table_name='[table_name]' AND column_name='[column_name]';
    
    -- Lihat data penyimpanan kolom indeks terbalik tertentu
    SELECT * FROM information_schema.imci_fts_index_packs 
    WHERE schema_name='[db_name]' AND table_name='[table_name]' AND column_name='[column_name]';
  2. Hapus indeks teks penuh: Jika Anda tidak lagi memerlukan indeks teks penuh pada kolom, Anda dapat menghapusnya dengan memodifikasi COMMENT kolom tersebut.

    ALTER TABLE t1 MODIFY title VARCHAR(255) COMMENT 'imci_fts(enable=0)';

4: Variabel sistem inti

Parameter

Cakupan

Deskripsi

imci_enable_fts

Global

Apakah mengizinkan pembuatan indeks terbalik pada node penyimpanan kolom.

  • ON (default): Diaktifkan. Mendukung tipe data string dan JSON.

  • OFF: Dinonaktifkan.

imci_enable_fts_query

Global / Session

Apakah mengizinkan penggunaan indeks terbalik pada node penyimpanan kolom.

  • ON: Diaktifkan.

  • OFF (default): Dinonaktifkan.

imci_fts_build_pack_cnt_min

Global

Jumlah minimum blok data penyimpanan kolom per indeks terbalik selama pembangunan indeks.

Rentang valid: 0-8192. Nilai default: 8. Nilai 0 berarti pembangunan dijeda sementara.

imci_fts_build_pack_cnt_max

Global

Jumlah maksimum blok data penyimpanan kolom per indeks terbalik selama pembangunan indeks.

Rentang valid: 0-8192. Nilai default: 128.

imci_fts_build_segment_size

Global

Ukuran segmen untuk setiap indeks terbalik selama pembangunan indeks.

Rentang valid: 0-4294967295. Nilai default: 536870912 (512 MB), dalam byte.

imci_fts_lru_cache_capacity

Global

Ruang cache untuk kamus indeks terbalik.

Rentang valid: [DBNodeClassMemory*1/10~DBNodeClassMemory*1/2]. Nilai default: [DBNodeClassMemory*10/100].

imci_enable_fts_pruner

Global / Session

Apakah mengaktifkan optimasi pra-penyaringan untuk indeks terbalik.

  • ON (default): Diaktifkan.

  • OFF: Dinonaktifkan.

imci_convert_like_to_match

Global / Session

Apakah mengaktifkan konversi LIKE menjadi MATCH dan menggunakan indeks terbalik untuk percepatan.

  • ON: Diaktifkan.

  • OFF (default): Dinonaktifkan.

  • ONLY_MATCH: Diaktifkan dan ekspresi LIKE diabaikan;

imci_enable_query_fts_like

Global / Session

Apakah mengaktifkan konversi MATCH menjadi LIKE.

  • ON: Diaktifkan.

  • OFF (default): Dinonaktifkan.

imci_enable_match_expr_fallback

Global / Session

Apakah mengaktifkan kueri pada data inkremental yang belum diindeks oleh indeks terbalik.

  • ON (default): Diaktifkan.

  • OFF: Dinonaktifkan.

imci_fts_build_fts_cnt

Global

Jumlah thread pembangunan indeks terbalik konkuren.

Rentang valid: 0-512. Nilai default: 4.

Catatan

Parameter ini hanya berlaku untuk versi berikut:

  • MySQL 8.0.1, dan versi minor harus 8.0.1.1.54 atau lebih baru.

  • MySQL 8.0.2, dan versi minor harus 8.0.2.2.34 atau lebih baru.

imci_fts_user_dict_table

Global

Mengonfigurasi kamus kustom untuk indeks teks penuh. Format: database_name/table_name.

Catatan

Parameter ini hanya berlaku untuk versi berikut:

  • MySQL 8.0.1, dan versi minor harus 8.0.1.1.54 atau lebih baru.

  • MySQL 8.0.2, dan versi minor harus 8.0.2.2.34 atau lebih baru.

imci_fts_user_dict_update

Global

Apakah memuat ulang kamus kustom yang ditentukan oleh imci_fts_user_dict_table.

  • ON (default): Diaktifkan.

  • OFF: Dinonaktifkan.

Catatan

Parameter ini hanya berlaku untuk versi berikut:

  • MySQL 8.0.1, dan versi minor harus 8.0.1.1.54 atau lebih baru.

  • MySQL 8.0.2, dan versi minor harus 8.0.2.2.34 atau lebih baru.

imci_convert_json_overlap_to_match

Global/Session

Mengontrol apakah mengaktifkan percepatan json_overlaps menggunakan indeks JSON.

  • ON: Diaktifkan.

  • OFF (default): Dinonaktifkan.

imci_convert_json_contains_to_match

Global/Session

Mengontrol apakah mengaktifkan percepatan json_contains menggunakan indeks JSON.

  • ON: Diaktifkan.

  • OFF (default): Dinonaktifkan.

imci_convert_json_extract_to_match

Global/Session

Mengontrol apakah mengaktifkan percepatan json_extract menggunakan indeks JSON.

  • ON: Diaktifkan.

  • OFF (default): Dinonaktifkan.

imci_convert_equal_to_match

Global/Session

Mengontrol apakah mengaktifkan percepatan ekspresi = menggunakan indeks kesamaan.

  • ON: Diaktifkan.

  • OFF (default): Dinonaktifkan.

imci_convert_in_to_match

Global/Session

Mengontrol apakah mengaktifkan percepatan ekspresi IN menggunakan indeks kesamaan.

  • ON: Diaktifkan.

  • OFF (default): Dinonaktifkan.

imci_convert_ne_to_match

Global/Session

Mengontrol apakah mengaktifkan percepatan ekspresi != menggunakan indeks kesamaan.

  • ON: Diaktifkan.

  • OFF (default): Dinonaktifkan.

imci_enable_fts_synonym

Global / Session

Apakah mendukung sinonim.

  • ON (default): Diaktifkan.

  • OFF: Dinonaktifkan.

imci_enable_fts_parse_term_with_and

Global / Session

Apakah menggunakan evaluasi AND setelah tokenisasi string kueri.

  • ON (default): Diaktifkan.

  • OFF: Dinonaktifkan, evaluasi OR.

imci_enable_fts_parse_term_with_phrase

Global / Session

Apakah menerapkan pencocokan posisi ketat untuk string kueri yang telah ditokenisasi dalam MODE BOOLEAN.

  • ON: Diaktifkan.

  • OFF (default): Dinonaktifkan.

imci_fts_stop_word_table

Global

Mengonfigurasi stop words kustom untuk indeks teks penuh. Format: database_name/table_name. Untuk informasi lebih lanjut, lihat Stop words kustom.

imci_fts_stop_word_update

Global

Apakah memuat ulang stop words kustom yang ditentukan oleh imci_fts_stop_word_table.

  • ON (default): Diaktifkan.

  • OFF: Dinonaktifkan.

imci_fts_synonym_table

Global

Mengonfigurasi sinonim kustom untuk indeks teks penuh. Format: database_name/table_name. Untuk informasi lebih lanjut, lihat Sinonim kustom.

imci_fts_synonym_update

Global

Apakah memuat ulang sinonim kustom yang ditentukan oleh imci_fts_synonym_table.

  • ON (default): Diaktifkan.

  • OFF: Dinonaktifkan.

Penting

Parameter dengan cakupan GLOBAL tidak dapat dimodifikasi langsung dari command line. Parameter tersebut hanya dapat diubah melalui Konsol. Saat dieksekusi dari command line, cakupan default adalah SESSION.

Kamus kustom

Fitur indeks teks penuh IMCI mendukung kamus kustom melalui tabel kustom untuk mencapai hasil tokenisasi yang lebih sesuai dengan skenario bisnis Anda.

Buat tabel kamus kustom

  1. Pertama, definisikan tabel dengan struktur yang sama seperti tabel my_fts_dict. Nama kolom harus sesuai dengan nama kolom pada tabel my_fts_dict.

    • type: Jenis tokenizer. Hanya tokenizer jieba (type 2) dan tokenizer IK (type 3) yang didukung.

    • word: Kata dalam kamus.

    • is_added: Tambahkan kata ke kamus kustom (nilai 1) atau hapus (nilai 2).

    CREATE TABLE my_fts_dict (
      `type` INT UNSIGNED NOT NULL COMMENT '2 for jieba, 3 for ik',
      `word` VARCHAR(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'dict word',
      `is_added` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1 for add, 2 for delete'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='imci fts user dict';
  2. Kamus kustom itu sendiri adalah tabel InnoDB. Operasi baca dan tulis sama seperti tabel biasa.

    1. Tambahkan kata:

      INSERT INTO my_fts_dict VALUES(2, "PolarDB", 1)
    2. Hapus kata:

      INSERT INTO my_fts_dict(type, word, is_added) VALUES(2, "PolarDB", 2);
      or
      DELETE FROM my_fts_dict WHERE type=2 AND word = "PolarDB";

Konfigurasi kamus kustom

  • Setelah membuat tabel kamus kustom, konfigurasikan parameter imci_fts_user_dict_table. Misalnya, test/my_fts_dict'.

    SET GLOBAL imci_fts_user_dict_table = 'test/my_fts_dict';
  • Jika imci_fts_user_dict_table sudah diatur, Anda juga dapat mengatur imci_fts_user_dict_update ke ON untuk memicu pemuatan ulang kamus kustom yang ditentukan oleh imci_fts_user_dict_table.

    SET GLOBAL imci_fts_user_dict_update = ON;
    Catatan

    Kamus kustom baru hanya berlaku untuk indeks terbalik yang dibangun setelahnya. Untuk menerapkannya pada indeks terbalik yang sudah ada, Anda harus membangun ulang indeks terbalik tersebut.

Sinonim kustom

Fitur indeks teks penuh IMCI mendukung sinonim kustom melalui tabel kustom.

Buat tabel sinonim kustom

Pertama, definisikan tabel dengan struktur yang sama seperti tabel my_synonym_dict. Nama kolom harus sesuai dengan nama kolom pada tabel my_synonym_dict.

  • word: Daftar sinonim. Kata berbeda dipisahkan dengan koma.

  • type: Jenis sinonim.

    • 0 menunjukkan bahwa semua kata dalam daftar saling bersinonim. Misalnya, "db,database,polardb" berarti "db" <=> "database" <=> "polardb". Saat Anda mencari "db", "database", atau "polardb", semua data yang cocok dengan "db", "database", dan "polardb" dikembalikan.

    • 1 menunjukkan bahwa kata pertama dalam daftar adalah istilah utama dan yang lainnya adalah sinonimnya. Misalnya, "db,database,polardb" berarti "db" => "database", "polardb". Saat Anda mencari "db", semua data yang cocok dengan "db", "database", dan "polardb" dikembalikan. Namun, saat Anda mencari "database", hanya data yang cocok dengan "database" yang dikembalikan.

CREATE TABLE my_synonym_dict (
  `word` VARCHAR(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'comma-separated synonyms',
  `type` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '0 for equivalent, 1 for mapping'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='imci fts synonym';

Tabel sinonim kustom itu sendiri adalah tabel InnoDB. Operasi baca dan tulis sama seperti tabel biasa.

  • Tambahkan kata:

    INSERT INTO my_synonym_dict VALUES("db,database,polardb", 0);
    INSERT INTO my_synonym_dict VALUES("imci,clickhouse,duckdb", 1);
  • Hapus kata:

    DELETE FROM my_synonym_dict WHERE type=1 AND word = "imci,clickhouse,duckdb";

Konfigurasi sinonim kustom

Setelah membuat tabel sinonim kustom, konfigurasikan parameter imci_fts_synonym_table. Misalnya, test/my_synonym_dict, di mana test adalah nama database dan my_synonym_dict adalah nama tabel.

SET GLOBAL imci_fts_synonym_table = 'test/my_synonym_dict';

Jika imci_fts_synonym_table sudah diatur, Anda juga dapat mengatur imci_fts_synonym_update ke ON untuk memicu pemuatan ulang sinonim kustom yang ditentukan oleh imci_fts_synonym_table.

SET GLOBAL imci_fts_synonym_update = ON;
Catatan

Jika synonym diatur ke mode indeks (misalnya, COMMENT "imci_fts(type=0 synonym=1)"), sinonim yang diperbarui hanya berlaku untuk data yang baru diindeks. Untuk menerapkan perubahan ke semua data, Anda harus membangun ulang indeks teks penuh.

Stop words kustom

Fitur indeks teks penuh IMCI mendukung stop words kustom melalui tabel kustom.

Buat tabel stop word kustom

Pertama, definisikan tabel dengan struktur yang sama seperti tabel my_stop_words. Nama kolom harus sesuai dengan my_stop_words.

  • word: Stop word.

  • is_added: Tambahkan kata ke kamus kustom (nilai 1) atau hapus (nilai 0).

CREATE TABLE my_stop_words (
  `word` VARCHAR(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'stop word',
  `is_added` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1 for add, 0 for delete'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='imci fts stop word';

Tabel stop word kustom itu sendiri adalah tabel InnoDB. Operasi baca dan tulis sama seperti tabel biasa.

  • Tambahkan kata:

    INSERT INTO my_stop_words VALUES("am", 1);
    INSERT INTO my_stop_words VALUES("chinese", 1);
  • Hapus kata:

    INSERT INTO my_stop_words(word, is_added) VALUES("chinese", 0);
    -- or
    DELETE FROM my_stop_words WHERE is_added=1 AND word = "chinese";

Konfigurasi stop words kustom

Setelah membuat tabel stop word kustom, konfigurasikan parameter imci_fts_stop_word_table. Misalnya, test/my_stop_words, di mana test adalah nama database dan my_stop_words adalah nama tabel.

SET GLOBAL imci_fts_stop_word_table = 'test/my_stop_words';

Jika imci_fts_stop_word_table sudah diatur, Anda juga dapat mengatur imci_fts_stop_word_update ke ON untuk memicu pemuatan ulang stop words kustom yang ditentukan oleh imci_fts_stop_word_table.

SET GLOBAL imci_fts_stop_word_update = ON;
Catatan

Stop words kustom baru hanya berlaku untuk indeks terbalik yang dibangun setelahnya. Untuk menerapkannya pada indeks terbalik yang sudah ada, Anda harus membangun ulang indeks terbalik tersebut.

FAQ

Q1: Bagaimana cara memilih tokenizer yang tepat?

  • Teks bahasa Inggris atau teks terformat: Gunakan type=0 (token) default, yang memisahkan berdasarkan spasi dan tanda baca.

  • Pencarian bahasa Mandarin yang presisi: Gunakan mode default type=2 (jieba) atau type=3 (ik).

  • Pencarian konten JSON: Gunakan type=4 (json) dengan parameter expr untuk menentukan path JSON yang akan diindeks.

  • Anda dapat melihat pratinjau bagaimana tokenizer berbeda memproses teks menggunakan fungsi dbms_imci.fts_tokenize.

Q2: Mengapa kueri saya tidak menggunakan indeks teks penuh?

  1. Pastikan SET imci_enable_fts_query = ON; telah dieksekusi. Ini adalah penyebab paling umum.

  2. Periksa output EXPLAIN dan verifikasi apakah operator FtsTableScan muncul. Jika tidak, pola kueri mungkin tidak cocok dengan indeks, atau sistem menentukan bahwa pemindaian tabel penuh memiliki biaya lebih rendah.

Q3: Apa perbedaan antara kueri LIKE dan MATCH...AGAINST?

  • LIKE '%keyword%' tanpa indeks teks penuh menyebabkan pemindaian tabel penuh, sehingga menghasilkan performa buruk. Bahkan ketika dipercepat oleh IMCI, fungsinya relatif terbatas.

  • MATCH...AGAINST adalah sintaks yang dirancang khusus untuk pencarian teks penuh. Sintaks ini memberikan performa tinggi dan akan mendukung fitur lanjutan seperti kueri Boolean dan skor relevansi di masa depan. Kami menyarankan menggunakan MATCH...AGAINST untuk aplikasi baru.