玖叶教程网

前端编程开发入门

MySQL学习实践DAY15-SELECT命令—全文本搜索Match()和Against()

WHAT:

文本搜索是对表中内容搜索的一种方法。


WHY:

1-LIKE关键字,它利用通配操作符匹配文本(和部分文本)。使用LIKE,能够查找包含特殊值或部分值的行(不管这些值位于列内什么位置)。

2-用基于文本的搜索作为正则表达式匹配列值的更进一步的介绍。使用正则表达式,可以编写查找所需行的非常复杂的匹配模式。虽然这些搜索机制非常有用,但存在几个重要的限制。

1)性能——通配符和正则表达式匹配通常要求MySQL尝试匹配表中所有行(而且这些搜索极少使用表索引)。因此,由于被搜索行数不断增加,这些搜索可能非常耗时。

2)明确控制——使用通配符和正则表达式匹配,很难(而且并不总是能)明确地控制匹配什么和不匹配什么。例如,指定一个词必须匹配,一个词必须不匹配,而一个词仅在第一个词确实匹配的情况下才可以匹配或者才可以不匹配。

3) 智能化的结果——虽然基于通配符和正则表达式的搜索提供了非常灵活的搜索,但它们都不能提供一种智能化的选择结果的方法。

3-所有这些限制以及更多的限制都可以用全文本搜索来解决。在使用全文本搜索时,MySQL不需要分别查看每个行,不需要分别分析和处理每个词。MySQL创建指定列中各词的一个索引,搜索可以针对这些词进行。这样,MySQL可以快速有效地决定哪些词匹配(哪些行包含它们),哪些词不匹配,它们匹配的频率,等等。


HOW:

1-用法

SELECT [column] FROM [table] WHERE Match([column]) Against('要匹配的字符')

2-可以看到搜索的等级和排序的机制,在别名列可以看到计算式的结果。

SELECT [column],Match([column]) Against('要匹配的字符') AS [别名] FROM [table];

3-扩展查询:把不是匹配字符的一些其他相关性的列也搜索出来。

SELECT [column] FROM [table] WHERE Match([column]) Against('要匹配的字符' WITH QUERY EXPANSION)

4-布尔类型查询

SELECT [column] FROM [table] WHERE Match([column]) Against('要匹配的字符' IN BOOLEAN MODLE)


注意事项:

1-并非所有引擎都支持全文本搜索,MySQL支持几种基本的数据库引擎。并非所有的引擎都支持本书所描述的全文本搜索。两个最常使用的引擎为MyISAM和InnoDB,前者支持全文本搜索,而后者不支持。如果你的应用中需要全文本搜索功能,应该记住这一点。

2-另外需要关注MySQL索引的概念。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言