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
。MySQL 提供了一个内置的支持中文、日语和韩语 (CJK) 的全文 ngram 解析器,以及一个可安装的用于日语的 MeCab 全文解析器插件。解析差异在第 12.10.8 节“ngram 全文解析器”和 第 12.10.9 节“MeCab 全文解析器插件”中进行了概述。
FULLTEXT
索引定义可以在创建表时在语句中给出 ,CREATE TABLE
或者稍后使用ALTER TABLE
or 添加CREATE INDEX
。FULLTEXT
对于大型数据集,将数据加载到没有索引的表中然后创建索引比将数据加载到具有现有索引的表中 要快得多FULLTEXT
。
全文搜索是使用
MATCH() AGAINST()
语法执行的。
MATCH()
采用逗号分隔的列表来命名要搜索的列。
AGAINST
接受一个要搜索的字符串,以及一个可选的修饰符,指示要执行的搜索类型。搜索字符串必须是在查询评估期间保持不变的字符串值。例如,这排除了表列,因为每行可能不同。
以前,MySQL 允许使用带有 的汇总列
MATCH()
,但使用此构造的查询执行不佳且结果不可靠。(这是因为它MATCH()
不是作为其参数的函数实现的,而是作为基表的基础扫描中当前行的行 ID 的函数实现的。)从 MySQL 8.0.28 开始,MySQL 没有不再允许此类查询;更具体地说,任何符合此处列出的所有条件的查询都会被拒绝
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');
允许在子句中
使用MATCH()
with a rollup column
。WHERE
全文搜索分为三种类型:
自然语言搜索将搜索字符串解释为自然人类语言中的短语(自由文本中的短语)。没有特殊的运算符,双引号 (") 字符除外。停用词列表适用。有关停用词列表的更多信息,请参阅 第 12.10.4 节,“全文停用词”。
IN NATURAL LANGUAGE MODE
如果给出修饰符或没有给出修饰符 ,全文搜索是自然语言搜索 。有关详细信息,请参阅 第 12.10.1 节,“自然语言全文搜索”。布尔搜索使用特殊查询语言的规则解释搜索字符串。该字符串包含要搜索的词。它还可以包含指定要求的运算符,例如匹配行中必须存在或不存在单词,或者它的权重应该比平常高或低。某些常用词(停用词)从搜索索引中省略,如果出现在搜索字符串中则不匹配。
IN BOOLEAN MODE
修饰符指定布尔搜索。有关详细信息,请参阅 第 12.10.2 节,“布尔全文搜索”。查询扩展搜索是自然语言搜索的修改。搜索字符串用于执行自然语言搜索。然后将搜索返回的最相关行中的词添加到搜索字符串中,然后再次进行搜索。查询返回来自第二次搜索的行。
IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION
orWITH QUERY EXPANSION
修饰符指定查询扩展搜索。有关详细信息,请参阅 第 12.10.3 节,“使用查询扩展进行全文搜索”。
有关FULLTEXT
查询性能的信息,请参阅第 8.3.5 节,“列索引”。
有关InnoDB
FULLTEXT
索引的更多信息,请参阅
第 15.6.2.4 节,“InnoDB 全文索引”。
全文搜索的约束在 第 12.10.5 节,“全文限制”中列出。
myisam_ftdump实用程序转储MyISAM
全文索引的内容。这可能有助于调试全文查询。请参阅
第 4.6.3 节,“myisam_ftdump — 显示全文索引信息”。