首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 全文搜尋完整指南:FULLTEXT 索引、MATCH AGAINST、布林模式與效能調校

     編輯:MySQL 資料庫相關知識

全文搜尋核心概念

MySQL 3.23.23 版起支援全文索引(FULLTEXT),適用於 MyISAM 引擎的 CHAR、VARCHAR、TEXT 欄位。核心函數為 MATCH() ... AGAINST()。

建立全文索引

-- 建表時建立
CREATE TABLE articles (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(200),
    body TEXT,
    FULLTEXT (title, body)
) ENGINE=MyISAM;

-- 或事後新增
ALTER TABLE articles ADD FULLTEXT(title, body);

效能提示:大量資料匯入時,先匯入資料再建立索引比預先建立索引快得多。

自然語言模式搜尋

SELECT * FROM articles
WHERE MATCH (title, body) AGAINST ('database');
  • 不區分大小寫
  • 依相關性遞減排序
  • 相關性計算因子:詞頻、文件頻率、唯一詞數等

取得相關性分數

SELECT id, MATCH (title, body) AGAINST ('Tutorial') AS score
FROM articles;

複雜查詢範例

SELECT id, body,
       MATCH (title, body) AGAINST ('Security implications of running MySQL as root') AS score
FROM articles
WHERE MATCH (title, body) AGAINST ('Security implications of running MySQL as root');

布林模式搜尋

MySQL 4.0.1+ 支援 IN BOOLEAN MODE,提供精確控制:

SELECT * FROM articles
WHERE MATCH (title, body) AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);

布林運算子

運算子功能
+必須包含該詞
-必須不包含該詞
> / <增加/降低詞權重
()分組子表達式
~降低權重(噪音詞標記)
*截斷運算子(置於詞尾,如 apple*)
""精確片語匹配

布林模式範例

  • +apple +juice:兩詞皆須出現
  • +apple -Macintosh:含 apple 但不含 Macintosh
  • +apple +(>pie <strudel):含 apple 且含 pie 或 strudel,pie 權重較高
  • apple*:匹配 apple, apples, applesauce, applet
  • "some words":精確匹配片語

重要限制與注意事項

  • MATCH() 欄位必須完全對應同一 FULLTEXT 索引定義(布林模式除外)
  • AGAINST() 參數必須為常數字串
  • 50% 門檻值:自然語言模式下,出現在超過 50% 文件的詞會被忽略(視為停用詞)
  • 小資料表詞頻統計不準,可能產生非預期結果

效能微調參數

修改參數後需重建索引:REPAIR TABLE tbl_name QUICK;

重建索引指令

REPAIR TABLE articles QUICK;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
參數說明版本
ft_min_word_len最小索引詞長度(預設 4)4.0+
ft_stopword_file自訂停用詞檔案4.0.10+
ft_boolean_syntax布林模式運算子定義(唯讀,需重編譯修改)4.0+