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() 參數必須為常數字串| 參數 | 說明 | 版本 |
|---|---|---|
ft_min_word_len | 最小索引詞長度(預設 4) | 4.0+ |
ft_stopword_file | 自訂停用詞檔案 | 4.0.10+ |
ft_boolean_syntax | 布林模式運算子定義(唯讀,需重編譯修改) | 4.0+ |