MATCH (col1, col2, ...) AGAINST (expr [IN BOOLEAN MODE | WITH QUERY EXPANSION])
CHAR、VARCHAR、TEXTFULLTEXT (title, body)ALTER TABLE ADD FULLTEXT idx_name (col1, col2)先匯入資料 → 再建立 FULLTEXT 索引,速度遠快於邊匯入邊建索引。
SELECT * FROM articles
WHERE MATCH (title, body) AGAINST ('database');
SELECT * FROM articles
WHERE MATCH (title, body) AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
| 操作符 | 功能 |
|---|---|
| + | 必須包含 |
| - | 必須不包含 |
| > / < | 提高/降低相關性權重 |
| () | 分組子表達式 |
| ~ | 否定權重(降噪) |
| * | 截斷符(後綴匹配) |
| " " | 精確短語匹配 |
特點:無 50% 門檻、不按相關性排序、可無索引工作(極慢)。
SELECT * FROM articles
WHERE MATCH (title, body) AGAINST ('MySQL' WITH QUERY EXPANSION);
兩階段:先自然語言搜尋 → 分析高相關文檔關鍵詞 → 再次搜尋。適合關鍵詞模糊、需擴大召回的場景。
MySQL 內建分析器以空格、標點為分隔符,**無法正確切分中文**。解決方案:
SHOW STATUS LIKE 'Handler_read_key'; -- 高表示索引生效
SHOW STATUS LIKE 'Handler_read_rnd_next'; -- 高表示全表掃描,查詢低效