全部产品
Search
文档中心

AnalyticDB:Pencarian teks penuh

更新时间:Nov 10, 2025

Topik ini menjelaskan cara menggunakan fungsi indeks teks penuh MATCH() AGAINST(), MATCH() FUZZY(), dan MATCH() PHRASE() untuk melakukan pencarian teks penuh serta menyorot kata kunci pencarian.

Prasyarat

Indeks teks penuh telah dibuat. Untuk informasi selengkapnya, lihat Buat indeks teks penuh.

Data sampel

Dalam contoh ini, sebuah tabel bernama tbl_fulltext_demo dibuat sebagai sumber data sampel. Setiap indeks teks penuh menggunakan alat analisis yang berbeda. Pernyataan SQL berikut digunakan untuk membuat tabel tbl_fulltext_demo dan memasukkan data ke dalamnya:

/* RC_DDL_ENGINE_REWRITE_XUANWUV2=false */
CREATE TABLE `tbl_fulltext_demo` (
  `id` INT,
  `content` VARCHAR,
  `content_alinlp` VARCHAR,
  `content_ik` VARCHAR,
  `content_standard` VARCHAR,
  `content_ngram` VARCHAR,
  FULLTEXT INDEX fidx_c(`content`),  -- Gunakan alat analisis default
  FULLTEXT INDEX fidx_alinlp(`content_alinlp`) WITH ANALYZER alinlp,-- Gunakan alat analisis AliNLP
  FULLTEXT INDEX fidx_ik(`content_ik`) WITH ANALYZER ik,-- Gunakan alat analisis IK
  FULLTEXT INDEX fidx_standard(`content_standard`) WITH ANALYZER standard,-- Gunakan alat analisis Standard
  FULLTEXT INDEX fidx_ngram(`content_ngram`) WITH ANALYZER ngram,-- Gunakan alat analisis Ngram
  PRIMARY KEY (`id`)
) DISTRIBUTED BY HASH(id);



INSERT INTO tbl_fulltext_demo(id, content, content_alinlp, content_ik, content_standard, content_ngram) 
VALUES(1, 'Customers Need Better Products and Services', 'Customers Need Better Products and Services', 'Customers Need Better Products and Services', 'Customers Need Better Products and Services', 'Customers Need Better Products and Services')
,(2, 'Wuhan Changjiang Bridge','Wuhan Changjiang Bridge','Wuhan Changjiang Bridge','Wuhan Changjiang Bridge', 'Wuhan Changjiang Bridge')
,(3, 'Hangzhou, Zhejiang Province','Hangzhou, Zhejiang Province', 'Hangzhou, Zhejiang Province', 'Hangzhou, Zhejiang Province', 'Hangzhou, Zhejiang Province')
,(4, 'User Values and Commercial Values of Products','User Values and Commercial Values of Products', 'User Values and Commercial Values of Products', 'User Values and Commercial Values of Products', 'User Values and Commercial Values of Products');
                

Catatan penggunaan

  • Fungsi indeks teks penuh mendukung karakter khusus tertentu, tetapi karakter escape \\ harus digunakan sebelum karakter tersebut. Karakter khusus yang didukung meliputi: +-&|!(){}[]^"~*?:\/.

    Sebagai contoh, untuk mencari konten yang berisi Spring/Scenery, sintaks yang salah adalah: MATCH(content) AGAINST('Spring / Scenery'). Sintaks yang benar adalah: MATCH(content) AGAINST('Spring \\/ Scenery').

  • Fungsi indeks teks penuh tidak mendukung operator seperti =, !=, BETWEEN, IS NULL, IS NOT NULL, dan LIKE.

Match() against()

Fungsi MATCH() AGAINST() mendukung pencocokan kata dan pencocokan eksak. Fungsi ini dapat digunakan untuk mencari konten yang cocok dengan kata kunci dari satu atau beberapa kolom.

Sintaks

SELECT * FROM `table_name` WHERE match (column_name[ , ... ]) against('term')

Parameter

  • table_name: nama tabel yang ingin Anda cari.

  • column_name: nama kolom yang ingin Anda cari. Pisahkan beberapa kolom dengan koma (,).

  • term: kata kunci pencarian. Pencarian mendukung operator logika berikut:

    • AND: mencari konten yang cocok dengan semua kata kunci.

    • OR: mencari konten yang cocok dengan salah satu kata kunci.

    • NOT: mencari konten yang cocok dengan kata kunci di sebelah kiri tetapi tidak cocok dengan kata kunci di sebelah kanan operator logika.

    Catatan

    Operator logika tidak peka huruf besar/kecil.

Contoh 1: Lakukan kueri kolom tunggal

SELECT id, content
FROM `tbl_fulltext_demo`
WHERE MATCH(`content`) AGAINST('Products Services');

Hasil contoh:

+------+--------------------------------------+
| id   | content                              |
+------+--------------------------------------+
| 4    |User Values and Commercial Values of Products              |
+------+--------------------------------------+
| 1    | Customers Need Better Products and Services             |
+------+--------------------------------------+

Contoh 2: Lakukan kueri multi-kolom

Untuk mencari konten dari beberapa kolom, Anda tidak perlu membuat indeks multi-kolom. Jika masing-masing kolom memiliki indeks teks penuh, Anda dapat langsung melakukan pencarian teks penuh pada kolom-kolom tersebut.

SELECT id, content, content_alinlp
FROM `tbl_fulltext_demo`
WHERE MATCH(content, content_alinlp) AGAINST('Services');

atau

SELECT id, content, content_alinlp
FROM `tbl_fulltext_demo`
WHERE MATCH(content) AGAINST('Services')
OR MATCH(content_alinlp) AGAINST('Services');
Catatan

Kedua pernyataan SQL di atas memberikan hasil yang sama.

Hasil contoh:

+------+-----------------------------+------------------------------+
| id   | content                     | content_alinlp               |
+------+-----------------------------+------------------------------+
| 1    | Customers Need Better Products and Services    | Customers Need Better Products and Services     |
+------+-----------------------------+------------------------------+

Contoh 3: Lakukan kueri Boolean

  • Gunakan operator logika AND untuk mencari konten yang cocok dengan semua kata kunci.

    SELECT * FROM `tbl_fulltext_demo` WHERE MATCH(content) AGAINST('Products AND Services');

    Hasil contoh:

    +------+--------------------------------+--------------------------------+-----------------------------+--------------------------------------+--------------------------------------+
    | id   | content                        | content_alinlp                 | content_ik                  | content_standard                     | content_ngram                        |
    +------+--------------------------------+--------------------------------+-----------------------------+--------------------------------------+--------------------------------------+
    |    1 | Customers Need Better Products and Services         | Customers Need Better Products and Services         | Customers Need Better Products and Services       | Customers Need Better Products and Services               | Customers Need Better Products and Services               |
    +------+--------------------------------+--------------------------------+-----------------------------+--------------------------------------+--------------------------------------+
  • Gunakan operator logika OR untuk mencari konten yang cocok dengan salah satu kata kunci.

    SELECT * FROM `tbl_fulltext_demo` WHERE MATCH(content) AGAINST('Products OR Services');

    Hasil contoh:

    +------+--------------------------------+--------------------------------+-----------------------------+--------------------------------------+--------------------------------------+
    | id   | content                        | content_alinlp                 | content_ik                  | content_standard                     | content_ngram                        |
    +------+--------------------------------+--------------------------------+-----------------------------+--------------------------------------+--------------------------------------+
    |    4 | User Values and Commercial Values of Products         | User Values and Commercial Values of Products         | User Values and Commercial Values of Products       |User Values and Commercial Values of Products                | User Values and Commercial Values of Products               |
    +------+--------------------------------+--------------------------------+-----------------------------+--------------------------------------+--------------------------------------+
    |    1 | Customers Need Better Products and Services         | Customers Need Better Products and Services         | Customers Need Better Products and Services       | Customers Need Better Products and Services               |  Customers Need Better Products and Services              |
    +------+--------------------------------+--------------------------------+-----------------------------+--------------------------------------+--------------------------------------+
  • Gunakan operator logika NOT untuk mencari konten yang cocok dengan kata kunci di sebelah kiri tetapi tidak cocok dengan kata kunci di sebelah kanan operator logika.

    SELECT * FROM `tbl_fulltext_demo` WHERE MATCH(content) AGAINST('Products NOT Services');

    Hasil contoh:

    +------+--------------------------------+--------------------------------+-----------------------------+--------------------------------------+--------------------------------------+
    | id   | content                        | content_alinlp                 | content_ik                  | content_standard                     | content_ngram                        |
    +------+--------------------------------+--------------------------------+-----------------------------+--------------------------------------+--------------------------------------+
    |    4 | User Values and Commercial Values of Products         | User Values and Commercial Values of Products          | User Values and Commercial Values of Products      | User Values and Commercial Values of Products               | User Values and Commercial Values of Products               |
    +------+--------------------------------+--------------------------------+-----------------------------+--------------------------------------+--------------------------------------+
  • Gunakan operator logika NOT untuk mencari konten yang tidak cocok dengan kata kunci di sebelah kanan operator logika.

    SELECT * FROM `tbl_fulltext_demo` WHERE MATCH(content) AGAINST('*:* NOT Services');
    Penting

    *:* menentukan semua konten JSON. Ekspresi ini hanya dapat digunakan di sebelah kiri operator logika dan harus ditempatkan di awal nilai parameter term.

    Hasil contoh:

    +------+--------------------------------+--------------------------------+-----------------------------+--------------------------------------+--------------------------------------+
    | id   |           content              |          content_alinlp        |          content_ik         |          content_standard            |       content_ngram                  |
    +------+--------------------------------+--------------------------------+-----------------------------+--------------------------------------+--------------------------------------+
    |    2 |        Wuhan Changjiang Bridge          |        Wuhan Changjiang Bridge          |         Wuhan Changjiang Bridge      |         Wuhan Changjiang Bridge               |            Wuhan Changjiang Bridge             |
    +------+--------------------------------+--------------------------------+-----------------------------+--------------------------------------+--------------------------------------+
    |    4 |    User Values and Commercial Values of Products    |    User Values and Commercial Values of Products    |  User Values and Commercial Values of Products   |     User Values and Commercial Values of Products          |       User Values and Commercial Values of Products       |
    +------+--------------------------------+--------------------------------+-----------------------------+--------------------------------------+--------------------------------------+
    |    3 |  Hangzhou, Zhejiang Province   | Hangzhou, Zhejiang Province    | Hangzhou, Zhejiang Province |      Hangzhou, Zhejiang Province     |      Hangzhou, Zhejiang Province     |
    +------+--------------------------------+--------------------------------+-----------------------------+--------------------------------------+--------------------------------------+
  • Gunakan tanda kurung () untuk membuat kueri Boolean kompleks.

    SELECT id, content_alinlp
    FROM `tbl_fulltext_demo`
    WHERE MATCH(content_alinlp) AGAINST('(Wuhan OR Hangzhou) AND (Bridge OR Xihu)');

    Hasil contoh:

    +------+-----------------------+
    | id   | content_alinlp        |
    +------+-----------------------+
    |    2 | Wuhan Changjiang Bridge         |
    +------+-----------------------+

Contoh 4: Lakukan kueri dan filter set hasil

Pencarian teks penuh mengembalikan semua hasil yang mendekati kata kunci. Dalam skenario dengan volume data besar, ukuran set hasil berdasarkan kata kunci bisa sangat luas. Jika Anda hanya menginginkan hasil yang sangat relevan, Anda dapat memanfaatkan fitur pemfilteran set hasil yang disediakan oleh AnalyticDB for MySQL.

Pernyataan contoh berikut menyaring 90% hasil dengan kedekatan rendah dan hanya mengembalikan 10% hasil teratas:

SELECT id, content
FROM `tbl_fulltext_demo`
WHERE MATCH(content) AGAINST('Products Services') > 0.9;

Hasil contoh:

+------+--------------------------------------+
| id   | content                              |
+------+--------------------------------------+
|    4 | User Values and Commercial Values of Products               |
+------+--------------------------------------+
|    1 | Customers Need Better Products and Services               |
+------+--------------------------------------+

Contoh 5: Lakukan kueri dan urutkan hasil berdasarkan skor kedekatan

AnalyticDB for MySQL memungkinkan Anda memperoleh skor kedekatan hasil dan mengurutkannya berdasarkan skor tersebut.

  • Kueri skor kedekatan.

    SELECT id, content, MATCH(content) AGAINST('Products Services') AS score
    FROM `tbl_fulltext_demo`
    WHERE MATCH(content) AGAINST('Products Services') > 0.9;
    Penting

    WHERE MATCH(content) AGAINST('Products Services') > 0.9 menyaring 90% hasil dengan kedekatan rendah dan hanya mengembalikan 10% hasil teratas.

    Secara default, hasil yang dikembalikan tidak diurutkan berdasarkan skor kedekatan:

    +------+--------------------------------------+----------------------+
    | id   | content                              | score                |
    +------+--------------------------------------+----------------------+
    |    4 | User Values and Commercial Values of Products               | 0.13076457381248474  |
    +------+--------------------------------------+----------------------+
    |    1 | Customers Need Better Products and Services               | 0.2615291476249695   |
    +------+--------------------------------------+----------------------+

    Fungsi MATCH(content) AGAINST('Wuhan') dalam proyeksi SELECT belum tentu sama dengan fungsi MATCH(content) AGAINST('Products Services') dalam klausa WHERE. Pernyataan contoh berikut mengkueri skor kedekatan fungsi MATCH(content) AGAINST('Wuhan').

    SELECT *, MATCH(content) AGAINST('Wuhan') AS score
    FROM `tbl_fulltext_demo`
    WHERE MATCH(content) AGAINST('Products Services') > 0.9
    ORDER BY score DESC;

    Hasil contoh:

    +------+--------------------------------+--------------------------------+-----------------------------+-------------------------------------+--------------------------------------+-------------+
    | id   | content                        | content_alinlp                 | content_ik                  | content_standard                    | content_ngram                        |score        |
    +------+--------------------------------+--------------------------------+-----------------------------+-------------------------------------+--------------------------------------+-------------+
    |    4 | User Values and Commercial Values of Products         | User Values and Commercial Values of Products         | User Values and Commercial Values of Products       | User Values and Commercial Values of Products              | User Values and Commercial Values of Products               |0.0          |
    +------+--------------------------------+--------------------------------+-----------------------------+-------------------------------------+--------------------------------------+-------------+
    |    1 | Customers Need Better Products and Services         | Customers Need Better Products and Services         | Customers Need Better Products and Services       |Customers Need Better Products and Services               |  Customers Need Better Products and Services              |0.0          |
    +------+--------------------------------+--------------------------------+-----------------------------+-------------------------------------+--------------------------------------+-------------+
  • Urutkan hasil berdasarkan skor kedekatan.

    Gunakan klausa ORDER BY untuk mengurutkan hasil berdasarkan skor kedekatan secara menurun.

    SELECT id, content, MATCH(content) AGAINST('Products Services') AS score
    FROM `tbl_fulltext_demo`
    WHERE MATCH(content) AGAINST('Products Services') > 0.9
    ORDER BY score DESC;
    Penting

    WHERE MATCH(content) AGAINST('Products Services') > 0.9 menyaring 90% hasil dengan kedekatan rendah dan hanya mengembalikan 10% hasil teratas.

    Hasil contoh:

    +------+--------------------------------------+---------------------+
    | id   | content                              | score               |
    +------+--------------------------------------+---------------------+
    |    1 | Customers Need Better Products and Services               | 0.2615291476249695  |
    +------+--------------------------------------+---------------------+
    |    4 | User Values and Commercial Values of Products               | 0.13076457381248474 |
    +------+--------------------------------------+---------------------+

Contoh 6: Lakukan pencocokan kata

Secara default, pencarian teks penuh membagi kata kunci menjadi kata-kata individual sebelum mencari. Jika kata kunci tidak diapit tanda kutip ganda (""), hasil kueri yang cocok dengan salah satu kata dalam kata kunci tersebut akan dikembalikan.

Alat analisis AliNLP membagi kata kunci "Products and Services" menjadi "Products", "and", dan "Services", serta kata kunci "Products Services" menjadi "Products" dan "Services".

SELECT id, content_alinlp, MATCH(content_alinlp) AGAINST('Products Services') AS score
FROM `tbl_fulltext_demo`
WHERE MATCH(content_alinlp) AGAINST('Products Services') > 0.9
ORDER BY score DESC;
Penting

WHERE MATCH(content) AGAINST('Products Services') > 0.9 menyaring 90% hasil dengan kedekatan rendah dan hanya mengembalikan 10% hasil teratas.

Hasil kueri yang cocok dengan salah satu kata dalam kata kunci "Products Services" dikembalikan:

+------+--------------------------------------+---------------------+
| id   | content_alinlp                       | score               |
+------+--------------------------------------+---------------------+
|    1 | Customers Need Better Products and Services               | 0.2615291476249695  |
+------+--------------------------------------+---------------------+
|    4 | User Values and Commercial Values of Products               | 0.13076457381248474 |
+------+--------------------------------------+---------------------+

Contoh 7: Lakukan pencocokan eksak

Jika kata kunci diapit tanda kutip ganda (""), alat analisis tidak akan membaginya. Hasil kueri yang secara eksak cocok dengan frasa tersebut akan dikembalikan.

  • Cari konten yang secara eksak cocok dengan kata kunci Products Services.

    SELECT id, content_alinlp, MATCH (content_alinlp) AGAINST ('"product service"') AS score
    FROM `tbl_fulltext_demo`
    WHERE MATCH (content_alinlp) AGAINST ('"product service"') > 0.9
    ORDER BY score DESC;

    Set hasil kosong dikembalikan.

    Empty set
  • Cari konten yang secara eksak cocok dengan kata kunci Products and Services.

    SELECT id, content_alinlp, MATCH(content_alinlp) AGAINST('"Products and Services"') AS score
    FROM `tbl_fulltext_demo`
    WHERE MATCH(content_alinlp) AGAINST('"Products and Services"') > 0.9
    ORDER BY score DESC; 
    Penting

    WHERE MATCH(content) AGAINST('Products Services') > 0.9 menyaring 90% hasil dengan kedekatan rendah dan hanya mengembalikan 10% hasil teratas.

    Hasil contoh:

    +------+--------------------------------------+--------------------+
    | id   | content_alinlp                       | score              |
    +------+--------------------------------------+--------------------+
    |    1 | Customers Need Better Products and Services               | 0.3922937512397766 |
    +------+--------------------------------------+--------------------+

Match() fuzzy()

Fungsi MATCH() FUZZY() mendukung pencocokan fuzzy berdasarkan jarak edit Levenshtein. Dalam kasus ejaan kata kunci yang salah, pencocokan fuzzy membantu menemukan konten yang mirip dengan kata kunci.

Sintaks

SELECT * FROM `table_name` WHERE match (`column_name`) fuzzy('term') [max_edits(n)];

Parameter

  • table_name: nama tabel yang ingin Anda cari.

  • column_name: nama kolom yang ingin Anda cari.

  • term: kata kunci pencarian.

  • max_edits(n): jarak edit maksimum (opsional). Parameter ini menentukan jumlah minimum operasi penyisipan, penghapusan, atau penggantian yang diperlukan untuk mengubah string A menjadi string B. Nilai default: 2. Rentang valid: bilangan bulat 0 hingga 2. Sebagai contoh, string windos diubah menjadi windows dengan satu operasi penyisipan karakter 'w'. Dalam kasus ini, jarak edit antara windos dan windows adalah 1.

Contoh 1: Lakukan pencarian perkiraan

SELECT id, content
FROM tbl_fulltext_demo
WHERE MATCH(content_standard) FUZZY('hangzou');

Hasil contoh:

+------+-----------------------------+
| id   | content                     |
+------+-----------------------------+
|    3 | Hangzhou, Zhejiang Province |
+------+-----------------------------+

Contoh 2: Lakukan pencarian perkiraan dengan jarak edit 1

SELECT id, content
FROM tbl_fulltext_demo
WHERE MATCH(content_standard) FUZZY('hangzou') max_edits(1);

Hasil contoh:

+------+-----------------------------+
| id   | content                     |
+------+-----------------------------+
|    3 | Hangzhou, Zhejiang Province |
+------+-----------------------------+

Contoh 3: Lakukan pencarian perkiraan dengan jarak edit 2

SELECT id, content
FROM tbl_fulltext_demo
WHERE MATCH(content_standard) FUZZY('Wuhan Chang') max_edits(2);

Hasil contoh:

+------+-----------------------+
| id   | content               |
+------+-----------------------+
|    2 | Wuhan Changjiang Bridge         |
+------+-----------------------+

Match() phrase()

Fungsi MATCH() PHRASE() mendukung pencarian frasa. Fungsi ini digunakan untuk mencari konten yang cocok dengan beberapa kata kunci dalam kolom tertentu. Jika beberapa kata kunci cocok, Anda dapat menggunakan parameter slop untuk menyesuaikan urutan kata kunci.

Sintaks

SELECT * FROM `table_name` WHERE match (`column_name`) phrase('term1 term2') [slop(n)]

Parameter

  • table_name: nama tabel yang ingin Anda cari.

  • column_name: nama kolom yang ingin Anda cari.

  • term1 term2: daftar kata kunci pencarian. Pisahkan beberapa kata kunci dengan spasi. Urutan kata kunci memengaruhi hasil pencocokan.

  • slop(n): nilai slop maksimum (opsional). Setelah teks dibagi menjadi daftar kata oleh alat analisis, posisi kata ditandai mulai dari 0 secara berurutan. Kata-kata dapat dipindahkan untuk mencocokkan daftar kata kunci yang ditentukan oleh parameter PHRASE. Nilai default: 0. Rentang valid: bilangan bulat 0 hingga 6. Sebagai contoh, jika alat analisis Standard membagi teks "Merchandise and Services", hasilnya adalah "Merchandise", "and", "Services".

    Teks

    Merchandise

    Brand

    And

    Service

    Service

    Posisi

    0

    1

    2

    3

    4

    • PHRASE('Merchandise and'): Jarak slop adalah 1, artinya "Merchandise" dipindahkan satu langkah ke kanan atau "and" dipindahkan satu langkah ke kiri.

    • PHRASE('Merchandise Services'): Jarak slop adalah 2, artinya "Merchandise" dipindahkan dua langkah ke kanan atau "Services" dipindahkan dua langkah ke kiri.

Contoh: Cari frasa

Secara default, AnalyticDB for MySQL menggunakan alat analisis standard untuk membagi teks "Hangzhou, Zhejiang Province" menjadi "Hangzhou", "Zhejiang", dan "Province".

  • Cari konten yang cocok dengan daftar kata kunci zhejiang hangzhou.

    SELECT id, content
    FROM tbl_fulltext_demo
    WHERE MATCH(content_standard) PHRASE('zhejiang hangzhou');

    Nilai default parameter slop adalah 0. Tidak ada konten yang cocok dengan daftar kata kunci zhejiang hangzhou. Set hasil kosong dikembalikan.

    Empty set
  • Cari konten yang cocok dengan daftar kata kunci hangzhou Province dengan slop 1.

    SELECT id, content
    FROM tbl_fulltext_demo
    WHERE MATCH(content_standard) PHRASE('hangzhou Province') slop(1);

    Hasil contoh:

    +------+-----------------------------+
    | id   | content                     |
    +------+-----------------------------+
    |    3 | Hangzhou, Zhejiang Province |
    +------+-----------------------------+
  • Cari konten yang cocok dengan kata kunci zhejiang hangzhou dengan slop 2.

    SELECT id, content
    FROM tbl_fulltext_demo
    WHERE MATCH(content_standard) PHRASE('zhejiang hangzhou') slop(2);

    Hasil contoh:

    +------+-----------------------------+
    | id   | content                     |
    +------+-----------------------------+
    |    3 | Hangzhou, Zhejiang Province |
    +------+-----------------------------+

Contoh 2: Pencarian frasa bahasa Tionghoa

Dalam pencocokan frasa bahasa Tionghoa menggunakan MATCH() PHRASE(), penggunaan alat analisis bawaan AliNLP dan Ngram dapat menyebabkan kegagalan kueri. Oleh karena itu, kami merekomendasikan penggunaan Alat Analisis Standard dan Alat Analisis IK.

  • Cari konten yang cocok dengan daftar kata kunci Products Services dengan slop 1.

    SELECT id, content
    FROM tbl_fulltext_demo
    WHERE MATCH(content_ik) PHRASE('Products Services') slop(1);

    Hasil contoh:

    +------+--------------------------------------+
    | id   | content                              |
    +------+--------------------------------------+
    |    1 | Customers Need Better Products and Services               |
    +------+--------------------------------------+
  • Cari konten yang cocok dengan daftar kata kunci Products Services dengan slop 2.

    SELECT id, content
    FROM tbl_fulltext_demo
    WHERE MATCH(content_standard) PHRASE('Products Services') slop(2);

    Hasil contoh:

    +------+--------------------------------------+
    | id   | content                              |
    +------+--------------------------------------+
    |    1 | Customers Need Better Products and Services               |
    +------+--------------------------------------+

Dukungan penyorotan

Gunakan fungsi untuk menyorot kata kunci

AnalyticDB for MySQL memungkinkan Anda menggunakan fungsi fulltext_highlight(`column_name`) untuk menyorot kata kunci dalam kolom indeks teks penuh.

Contoh 1: Gunakan fungsi MATCH() AGAINST() untuk menentukan kata kunci yang ingin Anda sorot

  • Sorot kata kunci saat melakukan kueri kolom tunggal.

    SELECT MATCH(content_alinlp) AGAINST('Wuhan Changjiang') AS score, fulltext_highlight(content_alinlp)
    FROM tbl_fulltext_demo
    WHERE MATCH(content_alinlp) AGAINST('Wuhan Changjiang') > 0.9
    ORDER BY score DESC LIMIT 3;
    Penting

    WHERE MATCH(content_alinlp) AGAINST('Wuhan Changjiang') > 0.9 menyaring 90% hasil dengan kedekatan rendah dan hanya mengembalikan 10% hasil teratas.

    Hasil contoh:

    +--------------------+-----------------------------------------+
    | score              | fulltext_highlight(content_alinlp)      |
    +--------------------+-----------------------------------------+
    | 0.4413304328918457 |  Bridge         |
    +--------------------+-----------------------------------------+
  • Sorot kata kunci saat melakukan kueri multi-kolom.

    SELECT MATCH (content_alinlp) AGAINST ('Wuhan Changjiang') AS score, fulltext_highlight(content_alinlp)
    FROM tbl_fulltext_demo
    WHERE MATCH (content_alinlp) AGAINST ('Wuhan Changjiang') > 0.9
    AND MATCH(content_alinlp) AGAINST('Bridge') > 0.9
    ORDER BY score DESC LIMIT 3;
    Penting

    WHERE MATCH (content_alinlp) AGAINST ('Wuhan Changjiang') > 0.9 menyaring 90% hasil dengan kedekatan rendah dan hanya mengembalikan hasil 10% teratas berdasarkan kedekatan.

    Hasil contoh:

    +--------------------+--------------------------------------------------+
    | score              | fulltext_highlight(content_alinlp)               |
    +--------------------+--------------------------------------------------+
    | 0.2615291476249695 |            |
    +--------------------+--------------------------------------------------+

Contoh 2: Gunakan fungsi MATCH() FUZZY() untuk menyorot kata kunci

SELECT id, MATCH(content_standard) FUZZY('Wuhan Chang') as score, fulltext_highlight(content_standard)
FROM tbl_fulltext_demo
WHERE MATCH(content_standard) FUZZY('Wuhan Chang');

Hasil contoh:

+------+-------+--------------------------------------------------+
| id   | score | fulltext_highlight(content_standard)             |
+------+-------+--------------------------------------------------+
|    2 |   0.0 |  jiang Bridge         |
+------+-------+--------------------------------------------------+

Contoh 3: Gunakan fungsi MATCH() PHRASE() untuk menentukan kata kunci yang ingin Anda sorot

SELECT id, MATCH(content_ik) PHRASE('Products Services') slop(1) as score, fulltext_highlight(content_ik)
FROM tbl_fulltext_demo
WHERE MATCH(content_ik) PHRASE('Products Services') slop(1);

Hasil contoh:

+------+--------------------+--------------------------------------------------------+
| id   | score              | fulltext_highlight(content_ik)                         |
+------+--------------------+--------------------------------------------------------+
|    1 | 0.16922473907470703 | Customers Need Better  and                |
+------+--------------------+--------------------------------------------------------+

Gunakan petunjuk untuk menambahkan tag sorotan kustom

AnalyticDB for MySQL secara default menggunakan tag <em> dan </em> untuk penyorotan pencarian teks penuh. Anda juga dapat menggunakan petunjuk untuk mengatur nilai fulltext_highlight_pre_tag dan fulltext_highlight_post_tag guna menentukan tag sorotan kustom.

Contoh 1: Gunakan petunjuk untuk menambahkan tag sorotan kustom berdasarkan fungsi MATCH() AGAINST()

/*+ fulltext_highlight_pre_tag=*/
SELECT MATCH(content_alinlp) AGAINST('Wuhan Changjiang') AS score, fulltext_highlight(content_alinlp)
FROM tbl_fulltext_demo
WHERE MATCH(content_alinlp) AGAINST('Wuhan Changjiang') > 0.9
ORDER BY score DESC LIMIT 3;
Penting

WHERE MATCH (content_alinlp) AGAINST ('Wuhan Changjiang') > 0.9 menyaring 90% hasil dengan kedekatan rendah dan hanya mengembalikan hasil 10% teratas berdasarkan kedekatan.

Hasil contoh:

+--------------------+-------------------------------------------------+
| score              | fulltext_highlight(content_alinlp)              |
+--------------------+-------------------------------------------------+
| 0.2615291476249695 |  city  Bridge         |
+--------------------+-------------------------------------------------+

Contoh 2: Gunakan petunjuk untuk menambahkan tag sorotan kustom berdasarkan fungsi MATCH() FUZZY()

/*+ fulltext_highlight_pre_tag=*/
SELECT MATCH (content_alinlp) FUZZY ('Wuhan Changjiang') AS score, fulltext_highlight(content_alinlp)
FROM tbl_fulltext_demo
WHERE MATCH (content_alinlp) FUZZY ('Wuhan Changjiang') > 0.9
ORDER BY score DESC LIMIT 3;
Penting

WHERE MATCH (content_alinlp) FUZZY ('Wuhan Changjiang') > 0.9 menyaring 90% hasil dengan kedekatan rendah dan hanya mengembalikan 10% hasil teratas berdasarkan kedekatan.

Hasil contoh:

+--------------------+-------------------------------------------------+
| score              | fulltext_highlight(content_alinlp)              |
+--------------------+-------------------------------------------------+
| 0.0                |   Bridge         |
+--------------------+-------------------------------------------------+

Contoh 3: Gunakan petunjuk untuk menambahkan tag sorotan kustom berdasarkan fungsi MATCH() PHRASE()

/*+ fulltext_highlight_pre_tag=*/
SELECT MATCH (content_alinlp) PHRASE ('Wuhan') AS score, fulltext_highlight(content_alinlp)
FROM tbl_fulltext_demo
WHERE MATCH (content_alinlp) PHRASE ('Wuhan') > 0.9
ORDER BY score DESC LIMIT 3;
Penting

WHERE MATCH (content_alinlp) PHRASE ('Wuhan') > 0.9 menyaring 90% hasil dengan kedekatan rendah dan hanya mengembalikan hasil 10% teratas berdasarkan kedekatan.

Hasil contoh:

+--------------------+---------------------------------------------------------------+
| score              | fulltext_highlight(content_alinlp)                            |
+--------------------+---------------------------------------------------------------+
| 0.13076457381248474 | Customers Need Better  |
+--------------------+---------------------------------------------------------------+