Gunakan fungsi indeks teks penuh MATCH() AGAINST(), MATCH() FUZZY(), dan MATCH() PHRASE() untuk menjalankan pencarian teks penuh serta menyorot kata kunci yang sesuai dalam hasilnya.
Prasyarat
Indeks teks penuh telah dibuat. Untuk petunjuknya, lihat Create a full-text index.
Data sampel
Semua contoh dalam topik ini menggunakan tabel sampel tbl_fulltext_demo. Setiap indeks teks penuh menggunakan alat analisis yang berbeda. Jalankan pernyataan berikut untuk membuat tabel dan memasukkan data sampel.
/* 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`), -- Default tokenizer
FULLTEXT INDEX fidx_alinlp(`content_alinlp`) WITH ANALYZER alinlp,-- AliNLP tokenizer
FULLTEXT INDEX fidx_ik(`content_ik`) WITH ANALYZER ik,-- IK tokenizer
FULLTEXT INDEX fidx_standard(`content_standard`) WITH ANALYZER standard,-- Standard tokenizer
FULLTEXT INDEX fidx_ngram(`content_ngram`) WITH ANALYZER ngram,-- Ngram tokenizer
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
+-&|!(){}[]^"~*?:\/, tetapi Anda harus melakukan escape terhadap karakter tersebut dengan\\.Misalnya, untuk mencari data yang berisi
Spring/Scenery, pernyataan yang salah adalahmatch(content) against('Spring / Scenery' )dan pernyataan yang benar adalahmatch(content) against('Spring \\/ Scenery'). -
Fungsi indeks teks penuh tidak mendukung operator
=,!=,between,is null,is not null, ataulike. -
Untuk data historis atau data yang dimigrasikan dari database lain, Anda harus menjalankan
BUILD TABLE tablename force=truesetelah membuat indeks teks penuh agar indeks tersebut berlaku. Jika tidak, kueriMATCH AGAINSTakan mengembalikan error. Anda dapat memeriksa status task BUILD diINFORMATION_SCHEMA.KEPLER_META_BUILD_TASK. StatusstatusbernilaiFINISHmenandakan bahwa task telah selesai.
Pilih fungsi pencarian
Pencarian teks penuh menyediakan tiga fungsi pencarian. Pilih salah satu berdasarkan skenario Anda:
|
Skenario |
Fungsi |
|
Mencocokkan kata kunci atau frasa eksak, dengan logika AND, OR, dan NOT. |
|
|
Menoleransi kesalahan ketik atau ejaan pada input dan tetap mengembalikan konten yang mirip dengan kata kunci. |
|
|
Mencocokkan beberapa kata kunci dalam urutan tertentu, dengan jumlah perpindahan antar kata kunci yang dikontrol. |
|
MATCH() AGAINST()
MATCH() AGAINST() mendukung pencocokan kata dan pencocokan eksak. Fungsi ini menjalankan pencocokan kata kunci terhadap kolom yang ditentukan dan mengembalikan konten yang sesuai.
MATCH() AGAINST() mengembalikan skor relevansi untuk setiap baris yang cocok. Anda dapat memfilter set hasil dengan menentukan ambang batas, seperti > 0.9. Ambang batas ini menyaring persentil terbawah dari hasil berdasarkan relevansi. Misalnya, > 0.9 menyaring 90% hasil terbawah berdasarkan relevansi dan hanya mengembalikan 10% teratas. Secara default, set hasil yang dikembalikan tidak diurutkan berdasarkan skor relevansi. Untuk mengurutkan hasil berdasarkan skor relevansi, gunakan klausa ORDER BY.
Sintaks
SELECT * FROM `table_name` WHERE match (column_name[ , ... ]) against('term')
Parameter
-
table_name: tabel yang akan dicari. -
column_name: kolom yang akan dicari. Untuk mencari beberapa kolom, pisahkan nama kolom dengan koma (,). -
term: kata kunci yang akan dicari. Kueri kata kunci mendukung operator logika berikut:-
AND: mengembalikan konten yang sesuai dengan semua kata kunci. -
OR: mengembalikan konten yang sesuai dengan salah satu kata kunci. -
NOT: mengembalikan konten yang sesuai dengan kata kunci di sebelah kiri operator tetapi tidak sesuai dengan kata kunci di sebelah kanan.
-
Operator logika tidak peka huruf besar/kecil.
Contoh 1: Kueri kolom tunggal
SELECT id, content
FROM `tbl_fulltext_demo`
WHERE MATCH (`content`) AGAINST ('Products Services');
Hasil berikut dikembalikan:
+------+-----------------------------------------------+
| id | content |
+------+-----------------------------------------------+
| 4 | User Values and Commercial Values of Products |
+------+-----------------------------------------------+
| 1 | Customers Need Better Products and Services |
+------+-----------------------------------------------+
Contoh 2: Kueri multi-kolom
Untuk mencocokkan beberapa kolom, Anda tidak perlu membuat indeks komposit multi-kolom. Selama setiap kolom dalam kondisi memiliki indeks teks penuh, Anda dapat menjalankan kueri indeks teks penuh multi-kolom.
SELECT id, content, content_alinlp
FROM `tbl_fulltext_demo`
WHERE MATCH (content, content_alinlp) AGAINST ('Services');
Kueri berikut setara. Kueri ini menggabungkan kondisi per kolom dengan OR:
SELECT id, content, content_alinlp
FROM `tbl_fulltext_demo`
WHERE MATCH (content) AGAINST ('Services')
OR MATCH (content_alinlp) AGAINST ('Services');
Hasil berikut dikembalikan:
+------+---------------------------------------------+---------------------------------------------+
| id | content | content_alinlp |
+------+---------------------------------------------+---------------------------------------------+
| 1 | Customers Need Better Products and Services | Customers Need Better Products and Services |
+------+---------------------------------------------+---------------------------------------------+
Contoh 3: Kueri Boolean
-
Gunakan operator AND untuk mengembalikan konten yang sesuai dengan semua kata kunci.
SELECT * FROM `tbl_fulltext_demo` WHERE MATCH (content) AGAINST ('Products AND Services');
Hasil berikut dikembalikan:
+------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+---------------------------------------------+
| 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 OR untuk mengembalikan konten yang sesuai dengan salah satu kata kunci.
SELECT * FROM `tbl_fulltext_demo` WHERE MATCH (content) AGAINST ('Products OR Services');
Hasil berikut dikembalikan:
+------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+
| 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 NOT untuk hanya mengembalikan konten yang sesuai dengan kata kunci di sebelah kiri operator.
SELECT * FROM `tbl_fulltext_demo` WHERE MATCH (content) AGAINST ('Products NOT Services');
Hasil berikut dikembalikan:
+------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+
| 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 NOT bersama dengan
*:*untuk mengecualikan baris yang sesuai dengan kata kunci di sebelah kanan operator. Dalam kueri berikut,*:*mencocokkan semua baris dalam tabel, dan kueri mengembalikan baris yang tidak sesuai denganServices.
SELECT * FROM `tbl_fulltext_demo` WHERE MATCH (content) AGAINST ('*:* NOT Services');
Gunakan *:* hanya di sebelah kiri operator logika, dan hanya di awal ekspresi.
Hasil berikut dikembalikan:
+------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+
| 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 berikut dikembalikan:
+------+-------------------------+
| id | content_alinlp |
+------+-------------------------+
| 2 | Wuhan Changjiang Bridge |
+------+-------------------------+
Contoh 4: Pemfilteran set hasil
Pencarian teks penuh mengembalikan semua hasil yang mirip dengan kata kunci. Ketika volume data besar, set hasil dari kueri kata kunci juga besar, tetapi biasanya Anda hanya membutuhkan hasil dengan relevansi tinggi. Oleh karena itu, AnalyticDB for MySQL menyediakan pemfilteran set hasil.
Contoh berikut menyaring 90% hasil terbawah berdasarkan relevansi dan hanya mengembalikan 10% teratas.
SELECT id, content
FROM `tbl_fulltext_demo`
WHERE MATCH (content) AGAINST ('Products Services') > 0.9;
Hasil berikut dikembalikan:
+------+-----------------------------------------------+
| id | content |
+------+-----------------------------------------------+
| 4 | User Values and Commercial Values of Products |
+------+-----------------------------------------------+
| 1 | Customers Need Better Products and Services |
+------+-----------------------------------------------+
Contoh 5: Skor relevansi dan pengurutan
AnalyticDB for MySQL dapat mengembalikan skor relevansi dari set hasil dan mengurutkan hasil berdasarkan skor relevansi.
-
Kueri skor relevansi.
SELECT id, content, MATCH (content) AGAINST ('Products Services') AS score
FROM `tbl_fulltext_demo`
WHERE MATCH (content) AGAINST ('Products Services') > 0.9;
WHERE MATCH(content) AGAINST('Products Services') > 0.9 menyaring 90% hasil dengan relevansi rendah dan hanya mengembalikan 10% teratas berdasarkan skor relevansi.
Secara default, set hasil yang dikembalikan tidak diurutkan berdasarkan skor relevansi:
+------+-----------------------------------------------+----------------------+
| id | content | score |
+------+-----------------------------------------------+----------------------+
| 4 | User Values and Commercial Values of Products | 0.13076457381248474 |
+------+-----------------------------------------------+----------------------+
| 1 | Customers Need Better Products and Services | 1.1090354919433594 |
+------+-----------------------------------------------+----------------------+
Ekspresi MATCH(content) AGAINST ('Wuhan') dalam proyeksi SELECT tidak perlu sesuai dengan ekspresi MATCH(content) AGAINST ('Products Services') dalam klausa WHERE. Pernyataan kueri berikut mengembalikan skor relevansi untuk 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 berikut dikembalikan:
+------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-----------------------------------------------+-------+
| 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 berdasarkan relevansi.
Gunakan klausa ORDER BY untuk mengurutkan hasil berdasarkan skor relevansi 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;
WHERE MATCH(content) AGAINST('Products Services') > 0.9 menyaring 90% hasil dengan relevansi rendah dan hanya mengembalikan 10% teratas berdasarkan skor relevansi.
Hasil berikut dikembalikan:
+------+-----------------------------------------------+---------------------+
| id | content | score |
+------+-----------------------------------------------+---------------------+
| 1 | Customers Need Better Products and Services | 0.2615291476249695 |
+------+-----------------------------------------------+---------------------+
| 4 | User Values and Commercial Values of Products | 0.13076457381248474 |
+------+-----------------------------------------------+---------------------+
Contoh 6: Pencocokan kata
Secara default, pencarian teks penuh pertama-tama melakukan tokenisasi terhadap kata kunci lalu mencari. Jika Anda tidak membungkus kata kunci dengan tanda kutip ganda, baris dikembalikan ketika sesuai dengan salah satu kata kunci yang telah ditokenisasi.
Alat analisis AliNLP membagi Products and Services menjadi Products, and, dan Services, serta membagi 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;
WHERE MATCH(content) AGAINST('Products Services') > 0.9 menyaring 90% hasil dengan relevansi rendah dan hanya mengembalikan 10% teratas berdasarkan skor relevansi.
Baris dikembalikan ketika sesuai dengan salah satu kata kunci dalam Products Services:
+------+-----------------------------------------------+---------------------+
| 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: Pencocokan eksak
Jika Anda membungkus kata kunci dengan tanda kutip ganda, alat analisis tidak membagi kata kunci tersebut. Baris hanya dikembalikan ketika data dalam kolom yang ditentukan secara eksak sesuai dengan kata kunci yang dikutip.
-
Cari konten yang secara eksak sesuai dengan kata kunci Products 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;
Pencocokan eksak untuk kata kunci Products Services mengembalikan hasil kosong:
Empty set
-
Cari konten yang secara eksak sesuai 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;
WHERE MATCH(content) AGAINST('Products Services') > 0.9 menyaring 90% hasil dengan relevansi rendah dan hanya mengembalikan 10% teratas berdasarkan skor relevansi.
Hasil berikut dikembalikan:
+------+---------------------------------------------+--------------------+
| id | content_alinlp | score |
+------+---------------------------------------------+--------------------+
| 1 | Customers Need Better Products and Services | 0.3922937512397766 |
+------+---------------------------------------------+--------------------+
MATCH() FUZZY()
MATCH() FUZZY() mendukung kueri pencocokan kabur. Fungsi ini mencocokkan teks yang dicari berdasarkan Levenshtein Edit Distance. Jika input berisi kesalahan, kueri pencocokan kabur tetap dapat mengembalikan konten yang mirip dengan kata kunci.
Sintaks
SELECT * FROM `table_name` WHERE match (`column_name`) fuzzy('term') [max_edits(n)];
Parameter
-
table_name: tabel yang akan dicari. -
column_name: kolom yang akan dicari. -
term: kata kunci yang akan dicari. -
max_edits(n): jarak edit maksimum (opsional), yaitu jumlah minimum perubahan (penyisipan, penghapusan, atau substitusi) yang diperlukan untuk mengubah string A menjadi string B. Nilai default: 2. Nilai yang valid: bilangan bulat dari 0 hingga 2. Misalnya, satu perubahan mengubahwindosmenjadiwindowsdengan menyisipkan karakter w, sehingga jarak edit maksimum antarawindosdanwindowsadalah 1.
Contoh 1: Kueri perkiraan
SELECT id, content
FROM tbl_fulltext_demo
WHERE MATCH(content_standard) FUZZY('hangzou');
Jika Anda tidak menentukan max_edits, jarak edit maksimum default adalah 2. Kata kunci yang salah eja hangzou tetap cocok dengan Hangzhou. Hasil berikut dikembalikan:
+------+-----------------------------+
| id | content |
+------+-----------------------------+
| 3 | Hangzhou, Zhejiang Province |
+------+-----------------------------+
Untuk membatasi jarak edit maksimum menjadi 1, tambahkan klausa max_edits(1):
SELECT id, content
FROM tbl_fulltext_demo
WHERE MATCH(content_standard) FUZZY('hangzou') max_edits(1);
Hasil berikut dikembalikan:
+------+-----------------------------+
| id | content |
+------+-----------------------------+
| 3 | Hangzhou, Zhejiang Province |
+------+-----------------------------+
Contoh 2: Kueri perkiraan dengan jarak edit 2
SELECT id, content
FROM tbl_fulltext_demo
WHERE MATCH(content_standard) FUZZY('Wuhan Chang') max_edits(2);
Hasil berikut dikembalikan:
+------+-------------------------+
| id | content |
+------+-------------------------+
| 2 | Wuhan Changjiang Bridge |
+------+-------------------------+
MATCH() PHRASE()
MATCH() PHRASE() mendukung kueri frasa. Fungsi ini mencari kolom yang ditentukan untuk konten yang sesuai dengan beberapa kata kunci. Ketika semua kata kunci cocok, Anda dapat menggunakan parameter slop sebagai kondisi tambahan yang menentukan apakah kueri frasa terpenuhi.
Sintaks
SELECT * FROM `table_name` WHERE match (`column_name`) phrase('term1 term2') [slop(n)]
Parameter
-
table_name: tabel yang akan dicari. -
column_name: kolom yang akan dicari. -
term1 term2: daftar kata kunci yang akan dicari. Pisahkan kata kunci dengan spasi. Urutan kata kunci memengaruhi hasil pencocokan. -
slop(n): jumlah maksimum perpindahan (opsional). Setelah alat analisis membagi teks menjadi daftar istilah, setiap istilah diberi nomor berurutan mulai dari 0. Istilah dipindahkan ke kiri atau kanan untuk mencocokkan daftar kata kunci yang ditentukan oleh parameter phrase. Nilai default: 0. Nilai yang valid: bilangan bulat dari 0 hingga 6. Misalnya, alat analisis Standard membagiNeed Better Products and ServicesmenjadiNeed,Better,Products,and, danServices.
|
Teks |
Kebutuhan |
Lebih Baik |
Products |
dan |
Services |
|
Position |
0 |
1 |
2 |
3 |
4 |
-
phrase('Need Products'): jarak slop adalah 1, artinya
Needberpindah satu posisi ke kanan atauProductsberpindah satu posisi ke kiri. -
phrase('Need and'): jarak slop adalah 2, artinya
Needberpindah dua posisi ke kanan atauandberpindah dua posisi ke kiri.
Contoh 1: Kueri frasa bahasa Inggris
AnalyticDB for MySQL menggunakan alat analisis Standard bawaan, yang membagi Hangzhou, Zhejiang Province menjadi Hangzhou, Zhejiang, dan Province dalam konfigurasi default.
-
Cari konten yang sesuai dengan kata kunci zhejiang hangzhou.
SELECT id, content
FROM tbl_fulltext_demo
WHERE MATCH(content_standard) PHRASE('zhejiang hangzhou');
Parameter slop default adalah 0, sehingga pencarian konten yang sesuai dengan kata kunci zhejiang hangzhou mengembalikan hasil kosong:
Empty set
-
Cari konten yang cocok dengan kata kunci hangzhou Province setelah satu kali pemindahan.
SELECT id, content
FROM tbl_fulltext_demo
WHERE MATCH(content_standard) PHRASE('hangzhou Province') slop(1);
Hasil berikut dikembalikan:
+------+-----------------------------+
| id | content |
+------+-----------------------------+
| 3 | Hangzhou, Zhejiang Province |
+------+-----------------------------+
-
Cari konten yang sesuai dengan kata kunci zhejiang hangzhou setelah dua perpindahan.
SELECT id, content
FROM tbl_fulltext_demo
WHERE MATCH(content_standard) PHRASE('zhejiang hangzhou') slop(2);
Hasil berikut dikembalikan:
+------+-----------------------------+
| id | content |
+------+-----------------------------+
| 3 | Hangzhou, Zhejiang Province |
+------+-----------------------------+
Contoh 2: Kueri frasa dengan alat analisis IK dan Standard
Dalam skenario pencocokan frasa bahasa Tionghoa yang menggunakan MATCH() PHRASE(), alat analisis bawaan AliNLP dan Ngram mungkin gagal mencocokkan data yang dikueri. Gunakan alat analisis Standard atau IK sebagai gantinya.
-
Cari konten yang sesuai dengan kata kunci Products Services setelah satu perpindahan.
SELECT id, content
FROM tbl_fulltext_demo
WHERE MATCH(content_ik) PHRASE('Products Services') slop(1);
Hasil berikut dikembalikan:
+------+---------------------------------------------+
| id | content |
+------+---------------------------------------------+
| 1 | Customers Need Better Products and Services |
+------+---------------------------------------------+
-
Cari konten yang sesuai dengan kata kunci Products Services setelah dua perpindahan.
SELECT id, content
FROM tbl_fulltext_demo
WHERE MATCH(content_standard) PHRASE('Products Services') slop(2);
Hasil berikut dikembalikan:
+------+---------------------------------------------+
| id | content |
+------+---------------------------------------------+
| 1 | Customers Need Better Products and Services |
+------+---------------------------------------------+
Dukungan penyorotan
Penyorotan menggunakan fungsi
AnalyticDB for MySQL mendukung fungsi fulltext_highlight(column_name), yang menyorot kata kunci yang sesuai dalam kolom indeks teks penuh.
Contoh 1: Sorot kata kunci MATCH() AGAINST()
-
Sorot kata kunci dalam 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;
WHERE MATCH(content_alinlp) AGAINST('Wuhan Changjiang') > 0.9 menyaring 90% hasil dengan relevansi rendah dan hanya mengembalikan 10% teratas berdasarkan skor relevansi.
Hasil berikut dikembalikan:
+--------------------+-------------------------------------------+
| score | fulltext_highlight(content_alinlp) |
+--------------------+-------------------------------------------+
| 0.2615291476249695 | Wuhan Changjiang Bridge |
+--------------------+-------------------------------------------+
-
Sorot kata kunci dalam 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;
WHERE MATCH(content_alinlp) AGAINST('Wuhan Changjiang') > 0.9 menyaring 90% hasil dengan relevansi rendah dan hanya mengembalikan 10% teratas berdasarkan skor relevansi.
Hasil berikut dikembalikan:
+--------------------+----------------------------------------------------+
| score | fulltext_highlight(content_alinlp) |
+--------------------+----------------------------------------------------+
| 0.2615291476249695 | Wuhan Changjiang Bridge |
+--------------------+----------------------------------------------------+
Contoh 2: Sorot kata kunci MATCH() FUZZY()
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 berikut dikembalikan:
+------+-------+-------------------------------------------+
| id | score | fulltext_highlight(content_standard) |
+------+-------+-------------------------------------------+
| 2 | 0.0 | Wuhan Changjiang Bridge |
+------+-------+-------------------------------------------+
Contoh 3: Sorot kata kunci MATCH() PHRASE()
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 berikut dikembalikan:
+------+---------------------+---------------------------------------------------------------+
| id | score | fulltext_highlight(content_ik) |
+------+---------------------+---------------------------------------------------------------+
| 1 | 0.16922473907470703 | Customers Need Better Products and Services |
+------+---------------------+---------------------------------------------------------------+
Kustomisasi penyorotan menggunakan hint
AnalyticDB for MySQL menyorot hasil pencarian teks penuh dengan tag <em> dan </em> secara default. Anda juga dapat menggunakan hint untuk mengatur fulltext_highlight_pre_tag dan fulltext_highlight_post_tag guna menentukan tag sorotan kiri dan kanan.
Contoh berikut menggunakan <span> dan </span> sebagai tag sorotan.
Contoh 4: Penyorotan kustom untuk MATCH() AGAINST()
/*+ fulltext_highlight_pre_tag=,fulltext_highlight_post_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;
WHERE MATCH(content_alinlp) AGAINST('Wuhan Changjiang') > 0.9 menyaring 90% hasil dengan relevansi rendah dan hanya mengembalikan 10% teratas berdasarkan skor relevansi.
Hasil berikut dikembalikan:
+--------------------+---------------------------------------------------+
| score | fulltext_highlight(content_alinlp) |
+--------------------+---------------------------------------------------+
| 0.2615291476249695 | Wuhan Changjiang Bridge |
+--------------------+---------------------------------------------------+
Contoh 5: Penyorotan kustom untuk MATCH() FUZZY()
/*+ fulltext_highlight_pre_tag=,fulltext_highlight_post_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;
WHERE MATCH(content_alinlp) FUZZY('Wuhan Changjiang') > 0.9 menyaring 90% hasil dengan relevansi rendah dan hanya mengembalikan 10% teratas berdasarkan skor relevansi.
Hasil berikut dikembalikan:
+--------------------+---------------------------------------------------+
| score | fulltext_highlight(content_alinlp) |
+--------------------+---------------------------------------------------+
| 0.0 | Wuhan Changjiang Bridge |
+--------------------+---------------------------------------------------+
Contoh 6: Penyorotan kustom untuk MATCH() PHRASE()
/*+ fulltext_highlight_pre_tag=,fulltext_highlight_post_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;
WHERE MATCH(content_alinlp) PHRASE('Wuhan') > 0.9 menyaring 90% hasil dengan relevansi rendah dan hanya mengembalikan 10% teratas berdasarkan skor relevansi.
Hasil berikut dikembalikan:
+---------------------+-----------------------------------------------------------------------------------+
| score | fulltext_highlight(content_alinlp) |
+---------------------+-----------------------------------------------------------------------------------+
| 0.13076457381248474 | Customers Need Better Products and Services |
+---------------------+-----------------------------------------------------------------------------------+