Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  Functions and Operators  /  Full-Text Search Functions

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

全文搜索使用 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');

WHERE 子句中使用 MATCH() 与 rollup 列是允许的。

有三种类型的全文搜索:

  • 自然语言搜索将搜索字符串解释为自然人类语言(自由文本短语)。没有特殊操作符,除了双引号(")字符。停用词列表适用。有关停用词列表的更多信息,请参阅 第 14.9.4 节,“Full-Text Stopwords”

    如果给定 IN NATURAL LANGUAGE MODE 修饰符或不给定修饰符,则全文搜索为自然语言搜索。有关更多信息,请参阅 第 14.9.1 节,“Natural Language Full-Text Searches”

  • 布尔搜索将搜索字符串解释为特殊查询语言的规则。字符串包含要搜索的单词。它也可以包含操作符,以指定要求单词必须出现在匹配行中或不出现在匹配行中,或者它应该被赋予更高或更低的权重。某些常见单词(停用词)被省略了搜索索引,并且如果出现在搜索字符串中,不会匹配。 IN BOOLEAN MODE 修饰符指定布尔搜索。有关更多信息,请参阅 第 14.9.2 节,“Boolean Full-Text Searches”

  • 查询扩展搜索是自然语言搜索的修改。搜索字符串用于执行自然语言搜索。然后,从搜索返回的最相关行中添加单词到搜索字符串,并再次执行搜索。查询返回第二次搜索的行。 IN NATURAL LANGUAGE MODE WITH QUERY EXPANSIONWITH 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”