当前位置:   article > 正文

【MySQL精通之路】Innodb-全文搜索功能

【MySQL精通之路】Innodb-全文搜索功能

目录

1.用法

1.1 语法

1.2 示例

2.全文搜索类型

2.1 自然语言全文搜索

2.2 布尔全文搜索

2.3 查询扩展搜索


1.用法

MATCH (col1,col2,...) AGAINST (expr [search_modifier])

  1. search_modifier:
  2. {
  3. IN NATURAL LANGUAGE MODE
  4. | IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION
  5. | IN BOOLEAN MODE
  6. | WITH QUERY EXPANSION
  7. }

MySQL支持全文索引搜索

1.MySQL中的全文索引是FULLTEXT类型的索引。

2.全文索引只能与InnoDB或MyISAM表一起使用。并且只能为CHARVARCHARTEXT列创建。

3.MySQL提供了一个支持中文日语韩语(CJK)的内置全文ngram解析器,以及一个可安装的日语MeCab全文解析器插件。

“ngram全文解析器”和“MeCab全文解析器插件”概述了解析差异。

4.创建表时,可以在CREATE TABLE语句中给出FULLTEXT索引定义,或者稍后使用ALTER TABLECREATE INDEX添加。

5.对于大型数据集,将数据加载到没有FULLTEXT索引的表中,然后创建索引的速度要比将数据加载至具有现有FULLTEXT索引来的表快得多。

1.1 语法

全文搜索使用MATCH()AGINST()语法执行。

MATCH()使用逗号分隔的列表命名要搜索的列

AGINST()使用一个要搜索的字符串和一个可选的修饰符,该修饰符指示要执行的搜索类型

搜索字符串必须是在查询求值过程中保持不变的字符串值

例如,这排除了表列,因为每行的列可能不同

以前,MySQL允许在MATCH()中使用汇总列,但使用此构造的查询性能较差结果不可靠。(这是因为MATCH()不是作为其参数的函数实现的,而是作为基表底层扫描中当前行的行ID的函数实现。)

从MySQL 8.0.28开始,MySQL不再允许此类查询

更具体地说,任何匹配此处列出的所有条件的查询都将被ER_FULLTEXT_with_ROLLUP拒绝:

1.MATCH()出现在查询块的SELECT列表、GROUP BY子句、HAVING子句或ORDER BY子句中。

2.查询块包含GROUP BY。。。WITH ROLLUP子句。

3.调用MATCH()函数的参数是分组列之一。

1.2 示例

以下是此类查询的一些示例:

  1. # MATCH() in SELECT list...
  2. SELECT MATCH (a) AGAINST ('abc') FROM t GROUP BY a WITH ROLLUP;
  3. SELECT 1 FROM t GROUP BY a, MATCH (a) AGAINST ('abc') WITH ROLLUP;
  4. # ...in HAVING clause...
  5. SELECT 1 FROM t GROUP BY a WITH ROLLUP HAVING MATCH (a) AGAINST ('abc');
  6. # ...and in ORDER BY clause
  7. SELECT 1 FROM t GROUP BY a WITH ROLLUP ORDER BY MATCH (a) AGAINST ('abc');

允许在WHERE子句中对汇总列使用MATCH()。

2.全文搜索类型

有三种类型:

2.1 自然语言全文搜索

自然语言搜索将搜索字符串解释为自然人类语言中的短语(自由文本中的短语)。除了双引号(“)字符外,没有特殊的运算符。适用停止字列表。

有关停止字列表的更多信息,请参阅“全文停止字”。

【MySQL精通之路】全文索引-全文停止字-CSDN博客

如果给定了IN NATURAL LANGUAGE MODE修饰符或没有给定修饰符,则全文搜索是自然语言搜索。有关更多信息,请参阅“自然语言全文搜索”。

【MySQL精通之路】全文搜索-自然语言全文搜索-CSDN博客

2.2 布尔全文搜索

布尔搜索使用特殊查询语言的规则来解释搜索字符串。该字符串包含要搜索的单词。它还可以包含指定要求的运算符,以便单词在匹配的行中必须存在不存在,或者应该比平时更高或更低地加权。某些常用词(停止语)会从搜索索引中省略,如果搜索字符串中存在,则不匹配。

IN BOOLEAN MODE修饰符指定布尔搜索

有关详细信息,请参阅“布尔全文搜索”。

【MySQL精通之路】全文搜索-布尔型全文搜索-CSDN博客

2.3 查询扩展搜索

查询扩展搜索是对自然语言搜索的修改。搜索字符串用于执行自然语言搜索

然后,将搜索返回的最相关行中的单词添加到搜索字符串中,并再次进行搜索

查询返回第二次搜索的行。

IN NATURAL LANGUAGE MODE WITH QUERY EXPANDIONWITH QUERY EXPANDION修饰符指定查询扩展搜索。

有关更多信息,请参阅“带查询扩展的全文搜索”。

其他知识点:

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

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

有关全文约束的更多信息,请参阅“全文约束”。

myisam_ftdump实用程序转储MyISAM全文索引的内容。这可能有助于调试全文查询。

请参阅“myisam_ftdump--显示全文索引信息”。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/589257
推荐阅读
相关标签
  

闽ICP备14008679号