MySQL 函数和运算符:全文搜索功能

来自Wikioe
Eijux讨论 | 贡献2021年4月29日 (四) 00:47的版本 (建立内容为“category:MySQL == 关于 == “'''MATCH (col1,col2,...) AGAINST (expr [search_modifier])'''”: <syntaxhighlight lang="mysql" highlight=""> search_modifier…”的新页面)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索


关于

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 类型的索引。
  • 全文索引只能与 InnoDB 或 MyISAM 表一起使用,并且只能为“CHAR”,“VARCHAR”或“TEXT”(都是非二进制字符)列创建。
  • MySQL 提供了一个内置的全文 ngram 解析器,该解析器支持中文,日文和韩文(CJK),以及一个用于日语的可安装的 MeCab 全文解析器插件。【?】
  • 创建表时,可以在“CREATE TABLE”语句中给出 FULLTEXT 索引定义,或者稍后使用“ALTER TABLE”或“CREATE INDEX”添加。
  • 对于大型数据集,将数据加载到不具有 FULLTEXT 索引的表中,然后再创建索引比将数据加载到具有 FULLTEXT 索引的表中要快得多。


使用“MATCH() ... AGAINST”语法执行全文搜索:

  1. “MATCH()”:取一个用逗号分隔的列表,该列表为要搜索的列名
  2. “AGAINST”:包含要搜索的字符串和可选的修饰符,该修饰符指示要执行的搜索类型。
    • 搜索字符串必须是在查询评估期间恒定的字符串值。


全文搜索分为三种类型:

  1. 自然语言搜索:将搜索字符串解释为自然人类语言中的短语(自由文本中的短语)。除双引号(“)字符外,没有特殊的运算符。适用停用词列 table 。
    • 如果指定了“IN NATURAL LANGUAGE MODE”修饰符或未给出修饰符,则全文搜索是自然语言搜索。
  2. 布尔搜索:使用特殊查询语言的规则解释搜索字符串。该字符串包含要搜索的单词。它还可以包含指定要求的运算符,例如,匹配行中必须存在或不存在一个单词,或者其权重应高于或低于平常。某些常见单词(停用词)将从搜索索引中省略,并且如果出现在搜索字符串中则不匹配。
    • IN BOOLEAN MODE”修饰符指定布尔搜索。
  3. 查询扩展搜索:是对自然语言搜索的修改:搜索字符串用于执行自然语言搜索,然后,将搜索返回的最相关行中的单词添加到搜索字符串中,然后再次执行搜索。该查询返回第二个搜索中的行。【!!!】
    • IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION”或“WITH QUERY EXPANSION”修饰符指定查询扩展搜索。


  • myisam_ftdump 工具转储MyISAM全文索引的内容。这对于调试全文查询可能会有所帮助。【?】

自然语言全文搜索