目录
1.用法
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支持全文索引和搜索:
1.MySQL中的全文索引是FULLTEXT类型的索引。
2.全文索引只能与InnoDB或MyISAM表一起使用。并且只能为CHAR、VARCHAR或TEXT列创建。
3.MySQL提供了一个支持中文、日语和韩语(CJK)的内置全文ngram解析器,以及一个可安装的日语MeCab全文解析器插件。
“ngram全文解析器”和“MeCab全文解析器插件”概述了解析差异。
4.创建表时,可以在CREATE TABLE语句中给出FULLTEXT索引定义,或者稍后使用ALTER TABLE或CREATE INDEX添加。
5.对于大型数据集,将数据加载到没有FULLTEXT索引的表中,然后创建索引的速度要比将数据加载至具有现有FULLTEXT索引来的表快得多。
1.1 语法
全文搜索使用MATCH()AGINST()语法执行。
MATCH()使用逗号分隔的列表来命名要搜索的列。
AGINST()使用一个要搜索的字符串和一个可选的修饰符,该修饰符指示要执行的搜索类型。
搜索字符串必须是在查询求值过程中保持不变的字符串值。
例如,这排除了表列,因为每行的列可能不同。
以前,MySQL允许在MATCH()中使用汇总列,但使用此构造的查询性能较差,结果不可靠。(这是因为MATCH()不是作为其参数的函数实现的,而是作为基表底层扫描中当前行的行ID的函数实现。)
从MySQL 8.0.28开始,MySQL不再允许此类查询;
更具体地说,任何匹配此处列出的所有条件的查询都将被ER_FULLTEXT_with_ROLLUP拒绝:
1.MATCH()出现在查询块的SELECT列表、GROUP BY子句、HAVING子句或ORDER BY子句中。
2.查询块包含GROUP BY。。。WITH ROLLUP子句。
3.调用MATCH()函数的参数是分组列之一。
1.2 示例
以下是此类查询的一些示例:
# 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()。
2.全文搜索类型
有三种类型:
2.1 自然语言全文搜索
自然语言搜索将搜索字符串解释为自然人类语言中的短语(自由文本中的短语)。除了双引号(“)字符外,没有特殊的运算符。适用停止字列表。
有关停止字列表的更多信息,请参阅“全文停止字”。
如果给定了IN NATURAL LANGUAGE MODE修饰符或没有给定修饰符,则全文搜索是自然语言搜索。有关更多信息,请参阅“自然语言全文搜索”。
【MySQL精通之路】全文搜索-自然语言全文搜索-CSDN博客
2.2 布尔全文搜索
布尔搜索使用特殊查询语言的规则来解释搜索字符串。该字符串包含要搜索的单词。它还可以包含指定要求的运算符,以便单词在匹配的行中必须存在或不存在,或者应该比平时更高或更低地加权。某些常用词(停止语)会从搜索索引中省略,如果搜索字符串中存在,则不匹配。
IN BOOLEAN MODE修饰符指定布尔搜索。
有关详细信息,请参阅“布尔全文搜索”。
【MySQL精通之路】全文搜索-布尔型全文搜索-CSDN博客
2.3 查询扩展搜索
查询扩展搜索是对自然语言搜索的修改。搜索字符串用于执行自然语言搜索。
然后,将搜索返回的最相关行中的单词添加到搜索字符串中,并再次进行搜索。
查询返回第二次搜索的行。
IN NATURAL LANGUAGE MODE WITH QUERY EXPANDION或WITH QUERY EXPANDION修饰符指定查询扩展搜索。
有关更多信息,请参阅“带查询扩展的全文搜索”。
其他知识点:
有关FULLTEXT查询性能的信息,请参阅“列索引”。
有关InnoDB FULLTEXT索引的更多信息,请参阅“InnoDB全文索引”。
有关全文约束的更多信息,请参阅“全文约束”。
myisam_ftdump实用程序转储MyISAM
全文索引的内容。这可能有助于调试全文查询。
请参阅“myisam_ftdump--显示全文索引信息”。