首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 內建全文搜尋實戰:打造高品質搜尋體驗

     編輯:MySQL 綜合教學

MySQL 內建全文搜尋功能,僅需標記欄位並使用專用語法,即可透過自然語言評分機制,實現高效能、高相關度的搜尋體驗。本文以音樂專輯評論資料為例,完整示範建立、索引與查詢流程。

1. 建立基礎資料表

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;

2. 定義全文索引欄位


ALTER TABLE reviews ADD FULLTEXT INDEX (data);

檢視索引狀態:


SHOW INDEXES FROM reviews;

輸出確認 data 欄位的 Index_type 為 FULLTEXT。

3. 全文搜尋語法與模式

MySQL 提供三種全文搜尋模式:

  • 自然語言模式(預設):MATCH(col) AGAINST('keyword'),依相關性排序,自動過濾常用停用詞。
  • 布林模式:MATCH(col) AGAINST('+keyword -exclude' IN BOOLEAN MODE),支援 +(必含)、-(必不含)、*(萬用字元)等運算子。
  • 查詢擴展模式:MATCH(col) AGAINST('keyword' WITH QUERY EXPANSION),先跑自然語言搜尋,再用高相關文件的關鍵字二次搜尋。

4. 實戰查詢範例


-- 自然語言搜尋 "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);

5. 重要限制與注意事項

  • 全文索引僅支援 CHAR、VARCHAR、TEXT 類型欄位。
  • 預設最小索引字長為 4 字元(可透過 ft_min_word_len 調整)。
  • 停用詞表預設內建英文,中文環境需自訂停用詞表或使用 ngram 解析器(MySQL 5.7.6+)。
  • MATCH() 欄位順序必須與索引定義一致。

結語

MySQL 全文搜尋零外部依賴、索引自動維護、自然語言評分智能,適合中小型應用快速上線高品質搜尋。大規模或中文重度場景建議搭配 Elasticsearch 等專用搜尋引擎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved