萬盛學電腦網

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

MySQL FULLTEXT 全文檢索關鍵注意事項:50% 門檻、布爾模式與中文支援現狀

MySQL 內建 FULLTEXT 索引為英文全文檢索提供了輕量級方案,但使用時有幾個關鍵限制必須了解,特別是不支援中文分詞(需依賴插件或外部引擎)。本文整理核心注意事項與進階查詢技巧。

一、建立 FULLTEXT 索引

ALTER TABLE table_name ADD FULLTEXT INDEX ft_idx (field_1, field_2);

二、基礎查詢語法

SELECT * FROM table_name
WHERE MATCH (field_1, field_2) AGAINST ('keyword');

三、核心注意事項:50% 門檻規則

規則:若搜尋關鍵字出現在總行數 ≥ 50% 的記錄中,MySQL 將其視為「常用詞」,自動忽略該關鍵字,導致查詢無結果。

現象:測試環境僅 1 筆測試資料時,任何查詢皆回傳空集合。

解決:插入數筆不含該關鍵字的測試資料,使關鍵字出現比例低於 50%。

本質:此為 MyISAM/InnoDB FULLTEXT 內建的自然語言模式停用詞機制,無法透過參數關閉。

四、進階查詢:布爾模式

繞過 50% 門檻、支援精確包含/排除:

SELECT * FROM table_name
WHERE MATCH (field_1, field_2) AGAINST ('+keyword_1 -keyword_2' IN BOOLEAN MODE);
  • +:必須包含
  • -:必須不包含
  • *:萬用字元(置於詞尾)
  • "":精確短語

優勢:不受 50% 門檻限制,適合精準檢索需求。

五、中文支援現狀與替代方案

  • MySQL 5.7+ 內建 ngram 解析器支援中文,但分詞粒度固定、精準度有限
  • 生產環境強烈建議採用專業搜索引擎:Elasticsearch(功能最全)、Sphinx(輕量高效)、或 Tantivy(Rust 新秀)
  • 若必須用 MySQL,可考慮 FULLTEXT WITH PARSER ngram 或應用層分詞後建立倒排表

六、總結

MySQL FULLTEXT 適合小規模、純英文、低頻檢索場景。核心避坑點:50% 門檻導致測試無結果、不支援中文、無相關性分數調優。正式專案請直接上 Elasticsearch 或 Sphinx。

copyright © 萬盛學電腦網 all rights reserved