12.9 全文搜索功能
匹配(col1,col2,...)反对(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 全文解析器插件。 第 12.9.8 节“ ngram 全文分析器”和第 12.9.9 节“ MeCab 全文分析器插件”中概述了解析差异。
-
创建 table 时,可以在CREATE TABLE语句中给出
FULLTEXT
索引定义,或者稍后使用ALTER TABLE或CREATE INDEX添加。 -
对于大型数据集,将数据加载到不具有
FULLTEXT
索引的 table 中,然后再创建索引比将数据加载到具有FULLTEXT
索引的 table 中要快得多。
使用MATCH()...反对语法执行全文搜索。 MATCH()取一个用逗号分隔的列 table,该列 table 为要搜索的列命名。 AGAINST
包含要搜索的字符串和可选的修饰符,该修饰符指示要执行的搜索类型。搜索字符串必须是在查询评估期间恒定的字符串值。例如,这排除了一个 table 列,因为每行可能不同。
全文搜索分为三种类型:
- 自然语言搜索将搜索字符串解释为自然人类语言中的短语(自由文本中的短语)。除双引号(“)字符外,没有特殊的运算符。适用停用词列 table。有关停用词列 table 的更多信息,请参见第 12.9.4 节“全文停用词”。
如果指定了IN NATURAL LANGUAGE MODE
修饰符或未给出修饰符,则全文搜索是自然语言搜索。有关更多信息,请参见第 12.9.1 节“自然语言全文本搜索”。
-
布尔搜索使用特殊查询语言的规则解释搜索字符串。该字符串包含要搜索的单词。它还可以包含指定要求的运算符,例如,匹配行中必须存在或不存在一个单词,或者其权重应高于或低于平常。某些常见单词(停用词)将从搜索索引中省略,并且如果出现在搜索字符串中则不匹配。
IN BOOLEAN MODE
修饰符指定布尔搜索。有关更多信息,请参见第 12.9.2 节“Boolean 全文本搜索”。 -
查询扩展搜索是对自然语言搜索的修改。搜索字符串用于执行自然语言搜索。然后,将搜索返回的最相关行中的单词添加到搜索字符串中,然后再次执行搜索。该查询返回第二个搜索中的行。
IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION
或WITH QUERY EXPANSION
修饰符指定查询扩展搜索。有关更多信息,请参见第 12.9.3 节“具有查询扩展的全文本搜索”。
有关FULLTEXT
查询性能的信息,请参见第 8.3.4 节“列索引”。
有关InnoDB
FULLTEXT
索引的更多信息,请参见第 14.6.2.4 节“ InnoDB FULLTEXT 索引”。
全文搜索的约束在第 12.9.5 节“全文限制”中列出。
myisam_ftdumpUtil 转储MyISAM
全文索引的内容。这对于调试全文查询可能会有所帮助。参见第 4.6.2 节“ myisam_ftdump-显示全文索引信息”。