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