14.9 全文搜索函数
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提供了内置的全文ngram解析器,支持中文、日文和韩文(CJK),并且提供了可安装的MeCab全文解析插件用于日文。解析差异在第14.9.8节“ngram全文解析器”和第14.9.9节“MeCab全文解析插件”中进行了描述。
-
可以在CREATE TABLE语句中给出FULLTEXT索引定义,当表创建时或使用ALTER TABLE或CREATE INDEX语句添加索引。
-
对于大型数据集,加载数据到没有
FULLTEXT
索引的表,然后创建索引后の方快捷,而不是加载数据到已经存在FULLTEXT
索引的表。
全文搜索使用MATCH() AGAINST()
语法。MATCH()
接受一个逗号分隔的列表,指定要搜索的列。AGAINST
接受一个字符串来搜索,并且可选地指定搜索类型。搜索字符串必须是一个常量字符串,在查询评估期间保持不变。这排除了例如表列,因为它可以在每行中不同。
MySQL 不允许使用MATCH()
与 rollup 列;更具体地说,任何匹配以下所有条件的查询都将被拒绝,并返回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()
与 rollup 列在WHERE
子句中是允许的。
全文搜索有三种类型:
-
自然语言搜索将搜索字符串解释为自然人类语言中的短语(自由文本)。除了双引号(")字符外,没有特殊操作符。stopword列表适用。关于stopword列表的更多信息,请见第14.9.4节,“Full-Text Stopwords”。
如果给定
IN NATURAL LANGUAGE MODE
修饰符或没有修饰符,全文搜索都是自然语言搜索。关于更多信息,请见第14.9.1节,“Natural Language Full-Text Searches”。 -
布尔搜索将搜索字符串解释为特殊查询语言的规则。字符串包含要搜索的单词。它也可以包含操作符,以指定必须在匹配行中存在或不存在的单词,或者将其权重设置为高或低。某些常见单词(stopwords)从搜索索引中被排除,如果出现在搜索字符串中,也不会匹配。
IN BOOLEAN MODE
修饰符指定布尔搜索。关于更多信息,请见第14.9.2节,“Boolean Full-Text Searches”。 -
自然语言搜索扩展是一种对自然语言搜索的修改。搜索字符串用于执行自然语言搜索,然后从最相关的行中添加词语,并再次执行搜索。查询返回第二个搜索结果的行。
IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION
或WITH QUERY EXPANSION
修饰符指定自然语言搜索扩展。更多信息,请见第14.9.3节,“Full-Text Searches with Query Expansion”。
关于FULLTEXT
查询性能的信息,请见第10.3.5节,“Column Indexes”。
关于InnoDB
FULLTEXT
索引的更多信息,请见第17.6.2.4节,“InnoDB Full-Text Indexes”。
全文搜索的限制条款列表在第14.9.5节,“Full-Text Restrictions”中。
myisam_ftdump实用工具将MyISAM
全文索引的内容导出。这可能对调试全文查询非常有帮助。更多信息,请见第6.6.3节,“myisam_ftdump — Display Full-Text Index information”。