MATCH (
col1
,col2
,...) AGAINST (expr
[search_modifier
])
search_modifier:
{
IN NATURAL LANGUAGE MODE
| IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION
| IN BOOLEAN MODE
| WITH QUERY EXPANSION
}
MySQL 支援全文索引和搜尋
MySQL 中的全文索引是類型為
FULLTEXT
的索引。全文索引只能與
InnoDB
或MyISAM
表格一起使用,並且只能為CHAR
、VARCHAR
或TEXT
資料行建立。MySQL 提供內建的全文 ngram 解析器,支援中文、日文和韓文 (CJK),以及用於日文的可安裝 MeCab 全文解析器外掛程式。解析差異概述於第 14.9.8 節,〈ngram 全文解析器〉和第 14.9.9 節,〈MeCab 全文解析器外掛程式〉。
FULLTEXT
索引定義可以在建立表格時在CREATE TABLE
陳述式中給定,或稍後使用ALTER TABLE
或CREATE INDEX
新增。對於大型資料集,將資料載入沒有
FULLTEXT
索引的表格,然後在那之後建立索引,比將資料載入具有現有FULLTEXT
索引的表格要快得多。
全文搜尋是使用 MATCH() AGAINST()
語法執行。MATCH()
採用以逗號分隔的清單,該清單會命名要搜尋的資料行。AGAINST
採用要搜尋的字串,以及一個可選的修飾符,指示要執行的搜尋類型。搜尋字串必須是在查詢評估期間恆定的字串值。這排除例如表格資料行,因為每個資料列都可能不同。
MySQL 不允許將彙總資料行與 MATCH()
一起使用;更具體地說,符合此處列出的所有條件的任何查詢都會被拒絕,並出現 ER_FULLTEXT_WITH_ROLLUP
MATCH()
出現在查詢區塊的SELECT
清單、GROUP BY
子句、HAVING
子句或ORDER BY
子句中。查詢區塊包含
GROUP BY ... WITH ROLLUP
子句。呼叫
MATCH()
函數的引數是其中一個群組資料行。
這裡顯示了一些此類查詢的範例
# MATCH() in SELECT list...
SELECT MATCH (a) AGAINST ('abc') FROM t GROUP BY a WITH ROLLUP;
SELECT 1 FROM t GROUP BY a, MATCH (a) AGAINST ('abc') WITH ROLLUP;
# ...in HAVING clause...
SELECT 1 FROM t GROUP BY a WITH ROLLUP HAVING MATCH (a) AGAINST ('abc');
# ...and in ORDER BY clause
SELECT 1 FROM t GROUP BY a WITH ROLLUP ORDER BY MATCH (a) AGAINST ('abc');
允許在 WHERE
子句中使用具有彙總資料行的 MATCH()
。
有三種類型的全文檢索
自然語言搜尋將搜尋字串解釋為自然人類語言中的片語(自由文字中的片語)。除了雙引號 (") 字元外,沒有特殊運算符。停用詞清單適用。有關停用詞清單的更多資訊,請參閱第 14.9.4 節,〈全文檢索停用詞〉。
如果給定
IN NATURAL LANGUAGE MODE
修飾詞,或者沒有給定任何修飾詞,全文搜尋會以自然語言搜尋的方式進行。更多資訊請參閱第 14.9.1 節,「自然語言全文搜尋」。布林搜尋會使用特殊查詢語言的規則來解讀搜尋字串。字串包含要搜尋的字詞。它還可以包含運算子,指定符合的資料列中必須存在或不存在某個字詞,或者該字詞的權重應該高於或低於平常。某些常見字詞(停用字)會從搜尋索引中省略,如果出現在搜尋字串中則不會符合。
IN BOOLEAN MODE
修飾詞指定布林搜尋。更多資訊請參閱第 14.9.2 節,「布林全文搜尋」。查詢擴展搜尋是對自然語言搜尋的修改。搜尋字串用於執行自然語言搜尋。然後,從搜尋返回的最相關資料列中的字詞會被加入到搜尋字串中,並再次執行搜尋。查詢會傳回第二次搜尋的資料列。
IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION
或WITH QUERY EXPANSION
修飾詞指定查詢擴展搜尋。更多資訊請參閱第 14.9.3 節,「使用查詢擴展的全文搜尋」。
關於 FULLTEXT
查詢效能的資訊,請參閱第 10.3.5 節,「資料行索引」。
關於 InnoDB
FULLTEXT
索引的更多資訊,請參閱第 17.6.2.4 節,「InnoDB 全文索引」。
全文搜尋的限制列在第 14.9.5 節,「全文限制」。
myisam_ftdump 工具會傾印 MyISAM
全文索引的內容。這可能對除錯全文查詢有幫助。請參閱第 6.6.3 節,「myisam_ftdump — 顯示全文索引資訊」。