MySQL 內建全文搜尋功能,僅需標記欄位並使用專用語法,即可透過自然語言評分機制,實現高效能、高相關度的搜尋體驗。本文以音樂專輯評論資料為例,完整示範建立、索引與查詢流程。
CREATE TABLE reviews (
id INT(5) PRIMARY KEY NOT NULL AUTO_INCREMENT,
data TEXT
);
插入三筆測試資料:
INSERT INTO `reviews` (`id`, `data`) VALUES
(1, 'Gingerboy has a new single out called Throwing Rocks. It\'s great!'),
(2, 'Hello all, I really like the new Madonna single. One of the hottest tracks currently playing... I\'ve been listening to it all day'),
(3, 'Have you heard the new band Hotter Than Hell? They have five members and they burn their instruments when they play in concerts. These guys totally rock! Like, awesome, dude!');
驗證資料:
SELECT * FROM reviews;
ALTER TABLE reviews ADD FULLTEXT INDEX (data);
檢視索引狀態:
SHOW INDEXES FROM reviews;
輸出確認 data 欄位的 Index_type 為 FULLTEXT。
MySQL 提供三種全文搜尋模式:
MATCH(col) AGAINST('keyword'),依相關性排序,自動過濾常用停用詞。MATCH(col) AGAINST('+keyword -exclude' IN BOOLEAN MODE),支援 +(必含)、-(必不含)、*(萬用字元)等運算子。MATCH(col) AGAINST('keyword' WITH QUERY EXPANSION),先跑自然語言搜尋,再用高相關文件的關鍵字二次搜尋。
-- 自然語言搜尋 "new single"
SELECT id, data, MATCH(data) AGAINST('new single') AS relevance
FROM reviews
WHERE MATCH(data) AGAINST('new single')
ORDER BY relevance DESC;
-- 布林模式:必含 "new" 且必不含 "Madonna"
SELECT * FROM reviews
WHERE MATCH(data) AGAINST('+new -Madonna' IN BOOLEAN MODE);
CHAR、VARCHAR、TEXT 類型欄位。ft_min_word_len 調整)。MATCH() 欄位順序必須與索引定義一致。MySQL 全文搜尋零外部依賴、索引自動維護、自然語言評分智能,適合中小型應用快速上線高品質搜尋。大規模或中文重度場景建議搭配 Elasticsearch 等專用搜尋引擎。