龙空技术网

MySQL学习系列之十四——全文本搜索(2)

小詹小詹 246

前言:

眼前大家对“mysql支持中文全文检索”大体比较注重,大家都需要分析一些“mysql支持中文全文检索”的相关文章。那么小编同时在网络上汇集了一些对于“mysql支持中文全文检索””的相关文章,希望姐妹们能喜欢,看官们快快来学习一下吧!

在上一篇内容中我们描述了全文本搜索的基本概念以及基本用法,这一篇内容会描述一些更高级的用法。

在开始之前,大家可以通过以下链接去复制创建表以及添加数据的语句。

MySQL建表语句2

1.查询扩展

查询扩展用来设法放宽所返回的全文本搜索结果的范围。考虑下面一种情况:我们需要查询所有包含anvils的注释,只有一个一个注释包含词anvils,但你还想找出可能与你的搜索相关的所有行,即使他们不包含词anvils。这也是扩展查询的一项任务。在使用扩展查询时,MySQL对数据和索引进行两遍扫描来完成搜索:

(1)首先,进行一个基本的全文本搜索,找出与搜索条件匹配的所有行;

(2)其次,MySQL检查这些匹配行并选择所有有用的词。

(3)最后,MySQL再次进行全文搜索,这次不仅使用原来的条件,而且还会使用所有有用的词。

我们先举一个例子,不使用扩展查询。

select note_text from productnotes where Match(note_text) Against('anvils');

基本全文本搜索

只有一行词包含anvils,所以只返回一行数据。

下面我们使用查询扩展

select note_text from productnotes where Match(note_text) Against('anvils' WITH QUERY EXPANSION);

查询扩展

这次结果有7行,第一行包含词anvils,因此等级最高。第二行和第三行不包含anvils,但是因为其包含第一行中的customer和recommend,所以也被检索出来。

2.布尔文本搜索

MySQL支持全文本搜索的另一种形式,称为布尔方式,以布尔方式,可以提供一下细节:

(1)要排斥的词;

(2)要匹配的词;

(3)排列提示(指定某些词比其它词更重要);

(4)表达式分组;

(5)另外一些内容;

select note_text from productnotes where Match(note_text) Against('heavy' IN BOOLEAN MODE);

包含heavy的所有行

这个案例检索包含heavy的所有行。

下面,我们再举一个例子,检索包含heavy,但是不以rope开始的词的行

select note_text from productnotes where Match(note_text) Against('heavy -rope*' IN BOOLEAN MODE);

包含heavy,但是不以rope开始的词的行

这次只返回一行结果。

3.下面通过几个例子来说明不同的用法:

(1)包含词rabbit和bait的行

select note_text from productnotes where Match(note_text) Against('+rabbit +bait' IN BOOLEAN MODE);

包含词rabbit和bait的行

(2)包含rabbit和bait至少一个词的行

select note_text from productnotes where Match(note_text) Against('rabbit bait' IN BOOLEAN MODE);

包含rabbit和bait至少一个词的行

(3)搜索短语变为rabbit bait,而不是两个词

select note_text from productnotes where Match(note_text) Against('"rabbit bait"' IN BOOLEAN MODE);

搜索短语变为rabbit bait,而不是两个词

(4)匹配rabbit和carrot,增加前者的等级,降低后者的等级

select note_text from productnotes where Match(note_text) Against('>rabbit <carrot' IN BOOLEAN MODE);

匹配rabbit和carrot,增加前者的等级,降低后者的等级

(5)匹配搜索词safe和combination,降低后者的等级

select note_text from productnotes where Match(note_text) Against('+safe +(<combination)' IN BOOLEAN MODE);

匹配搜索词safe和combination,降低后者的等级

关于全文本搜索的内容就这么多了。麻烦大家点赞,关注啊。

MySQL学习系列之十三——全文本搜索(1)

MySQL学习系列之十二——组合查询

MySQL学习系列之十一——创建联结

MySQL学习系列之十——联结

MySQL学习系列之九——子查询

MySQL学习系列之八——分组数据

MySQL学习系列之七——用聚集函数汇总数据

MySQL学习系列之六——创建计算字段

MySQL学习系列之五——通配符

MySQL学习系列之四——数据过滤和过滤数据

MySQL学习系列之三——不做限制的查询

MySQL学习系列之二——创建表及对表结构的基本操作

MySQL学习系列之一——MySQL简介

标签: #mysql支持中文全文检索