萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 全文搜尋實戰:內建 Fulltext 與中文分詞插件 mysqlcft 深度對比

MySQL 內建 Fulltext(僅支援 MyISAM,5.6+ InnoDB 也支援)

建立索引

CREATE TABLE articles (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  title VARCHAR(200),
  body TEXT,
  FULLTEXT (title, body)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;

基本查詢

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

-- 布林模式(支援 + - > < ~ * ")
SELECT * FROM articles WHERE MATCH(title, body) AGAINST('+apple -banana' IN BOOLEAN MODE);

-- 查詢擴展(自動擴展關鍵詞)
SELECT * FROM articles WHERE MATCH(title, body) AGAINST('北京' WITH QUERY EXPANSION);

布林操作符速查

符號含義範例
+必須包含+apple
-必須不包含-banana
>提高相關性>apple
<降低相關性
()分組+apple +(>banana
~降低排序值+apple ~banana
*尾部萬用字元appl*
" "精確短語"+apple pie"

中文全文搜尋痛點

內建 Fulltext 以空格/標點分詞,中文無分隔符 → 無法正確分詞,搜尋「北京奧運」找不到「北京 奧運」。

解決方案:mysqlcft 插件(Google 開源)

特點

  • 「三字節交叉切分演算法」:無需詞庫,精準度接近 LIKE '%...%'
  • 查詢速度比 LIKE 快 3-50 倍
  • 標準插件式安裝,不修改 MySQL 原始碼
  • 支援 MySQL 5.1.22~5.1.25 RC,字元集:GBK/GB2312/UTF-8/Latin1/BIG5
  • 僅支援 MyISAM 表

安裝步驟

# 1. 下載對應版本 .so 檔
wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/mysqlcft/mysqlcft-1.0.1-linux-x86_64.tar.gz
tar xzf mysqlcft-*.tar.gz

# 2. 複製到 plugin 目錄
cp mysqlcft.so /usr/lib/mysql/plugin/

# 3. 安裝插件
INSTALL PLUGIN mysqlcft SONAME 'mysqlcft.so';

# 4. 建立中文全文索引
ALTER TABLE articles ADD FULLTEXT INDEX ft_title_body (title, body) WITH PARSER mysqlcft;

# 5. 查詢(語法相同)
SELECT * FROM articles WHERE MATCH(title, body) AGAINST('北京 奧運');

替代方案對比

方案中文支援效能維護成本適用場景
MySQL 內建 Fulltext❌ 需預分詞高低英文/已分詞資料
mysqlcft✅ 無詞庫自動分詞高低中文中小型資料
Sphinx / Manticore✅ 專業分詞極高中(獨立服務)大規模、高併發搜尋
Elasticsearch✅ 最強分詞極高高(叢集運維)全文搜尋引擎級需求
應用層分詞 + 倒排索引表✅ 可控中高(自研)特殊業務邏輯

選型建議

  • 資料量 < 1000 萬、團隊無運維能力 → mysqlcft 或應用層分詞
  • 資料量 > 1000 萬、需即時索引、多語言 → Elasticsearch
  • 已有 Sphinx 基礎設施 → 繼續用 Manticore(Sphinx 分支)
copyright © 萬盛學電腦網 all rights reserved