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 — 顯示全文索引資訊」。