MySQL 內建 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% 的記錄中,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% 門檻限制,適合精準檢索需求。
ngram 解析器支援中文,但分詞粒度固定、精準度有限FULLTEXT WITH PARSER ngram 或應用層分詞後建立倒排表MySQL FULLTEXT 適合小規模、純英文、低頻檢索場景。核心避坑點:50% 門檻導致測試無結果、不支援中文、無相關性分數調優。正式專案請直接上 Elasticsearch 或 Sphinx。