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