扩展 MySQL 8.0  / 第 6 章 向 MySQL 添加函数  /  12.10 全文搜索功能

12.10 全文搜索功能

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 支持全文索引和搜索:

全文搜索是使用 MATCH() AGAINST()语法执行的。 MATCH()采用逗号分隔的列表来命名要搜索的列。 AGAINST接受一个要搜索的字符串,以及一个可选的修饰符,指示要执行的搜索类型。搜索字符串必须是在查询评估期间保持不变的字符串值。例如,这排除了表列,因为每行可能不同。

全文搜索分为三种类型:

  • 自然语言搜索将搜索字符串解释为自然人类语言中的短语(自由文本中的短语)。没有特殊的运算符,双引号 (") 字符除外。停用词列表适用。有关停用词列表的更多信息,请参阅 第 12.10.4 节,“全文停用词”

    IN NATURAL LANGUAGE MODE如果给出修饰符或没有给出修饰符 ,全文搜索是自然语言搜索 。有关详细信息,请参阅 第 12.10.1 节,“自然语言全文搜索”

  • 布尔搜索使用特殊查询语言的规则解释搜索字符串。该字符串包含要搜索的词。它还可以包含指定要求的运算符,例如匹配行中必须存在或不存在单词,或者它的权重应该比平常高或低。某些常用词(停用词)从搜索索引中省略,如果出现在搜索字符串中则不匹配。IN BOOLEAN MODE修饰符指定布尔搜索。有关详细信息,请参阅 第 12.10.2 节,“布尔全文搜索”

  • 查询扩展搜索是自然语言搜索的修改。搜索字符串用于执行自然语言搜索。然后将搜索返回的最相关行中的词添加到搜索字符串中,然后再次进行搜索。查询返回来自第二次搜索的行。IN NATURAL LANGUAGE MODE WITH QUERY EXPANSIONorWITH QUERY EXPANSION修饰符指定查询扩展搜索。有关详细信息,请参阅 第 12.10.3 节,“使用查询扩展进行全文搜索”

有关FULLTEXT查询性能的信息,请参阅第 8.3.4 节,“列索引”

有关InnoDB FULLTEXT索引的更多信息,请参阅 第 14.6.2.4 节,“InnoDB 全文索引”

全文搜索的约束在 第 12.10.5 节,“全文限制”中列出。

myisam_ftdump实用程序转储MyISAM全文索引的内容。这可能有助于调试全文查询。请参阅 第 4.6.2 节,“myisam_ftdump — 显示全文索引信息”