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类型的索引。

  • 全文索引只能与InnoDBMyISAMtable 一起使用,并且只能为CHARVARCHARTEXT列创建。

  • MySQL 提供了一个内置的全文 ngram 解析器,该解析器支持中文,日文和韩文(CJK),以及一个用于日语的可安装的 MeCab 全文解析器插件。 第 12.9.8 节“ ngram 全文分析器”第 12.9.9 节“ MeCab 全文分析器插件”中概述了解析差异。

  • 创建 table 时,可以在CREATE TABLE语句中给出FULLTEXT索引定义,或者稍后使用ALTER TABLECREATE 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 EXPANSIONWITH 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-显示全文索引信息”