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

MySQL 全文搜尋實戰:FULLTEXT 索引建立、查詢與中文分詞

     編輯:MySQL 綜合教學

建立全文索引

CREATE TABLE articles (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(200),
    body TEXT,
    FULLTEXT(title, body)
) ENGINE=MyISAM;  -- InnoDB 5.6+ 也支援
  • 大量導入資料時,先導入再建索引 (ALTER TABLE ADD FULLTEXT) 極快;先建索引再導入極慢。
  • MyISAM/InnoDB 均支援,InnoDB 5.6+ 才支援。

基本查詢:MATCH ... AGAINST

-- 自然語言模式 (預設)
SELECT * FROM articles 
WHERE MATCH(title, body) AGAINST('database');

-- 布林模式 (精確控制)
SELECT * FROM articles 
WHERE MATCH(title, body) AGAINST('+MySQL -YourSQL' IN BOOLEAN MODE);

布林模式操作符速查

符號含義
+必須包含
-必須不包含
*通配符 (僅尾部)
"..."短語精確匹配
~降低相關性

中文分詞痛點與解法

  • 內建 parser 僅按空白/標點切分,中文無空格 → 無法分詞。
  • 方案:
    1. 應用層分詞 (jieba、IK) 寫入專用 keywords 欄位,建全文索引。
    2. 使用 ngram parser (MySQL 5.7.6+):FULLTEXT(title, body) WITH PARSER ngram,自動按 bigram 切分。
    3. 外掛 parser (如 mysql-jieba) 編譯安裝,效果最佳但維護成本高。

效能提示

  1. 全文索引不支援 ORDER BY 相關性外的排序,需子查詢或應用層排序。
  2. 最小詞長 ft_min_word_len (MyISAM) / innodb_ft_min_token_size (InnoDB) 預設 3/4,中文建議設 1 或 2。
  3. 停用詞表 ft_stopword_file 可自訂。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved