mysql大文本搜索

3 篇文章 0 订阅

存储引擎对比

MySQL内置了三种存储引擎,分别是InnoDb,MyIsamMEMORY,一般情况下,MySQL5.X之后的版本都是使用InnoDb存储引擎.

三种引擎的对比

InnoDb

  1. 支持事务操作
  2. 支持自动增加列
  3. 具有行级锁定

MyIsam

  1. 不支持事务,也不支持外键,但是访问速度快
  2. 对大文本搜索性能较好

Memory

  1. 目标数据较少,而且需要频繁的被访问
  2. 采取的存储介质是系统内存,因此访问速度快,但是现在可以使用第三方内存型数据库代替

大文本的读取

综上所述,大文本的数据需要采用MyIsam存储引擎作为存储.

测试例子:


CREATE TABLE IF	NOT EXISTS product_desc 
(   
    prod_id INT NOT NULL, 
    prod_text text, 
    FULLTEXT ( prod_text ) 
) ENGINE = MyIsam;

建立索引可以在创建表时,直接添加,也可以在数据全部导入完毕之后再创建索引.一般而言,后面一种比前面一种的效率更好.

语法

使用Match()Against()函数进行搜索.

例如:


select prod_text 
from product_desc 
where match(note_text) against('rabbit');

match中输入需要进行匹配的列,可以是多个列,against中输入需要匹配的关键词,一般搜索出来的结果不区分大小写.

MyIsam执行大文本的搜索还是很快的,是因为它内部对大文本建立了索引.

查看优先级

MyIsam内部究竟是怎么工作的呢?


select prod_text,match(note_text) against('rabbit') as 'rank'
from product_desc;

可以从得出的结果中看到:

  1. 词靠前的行比词靠后的行的等级优先值更高
  2. MyIsam内部会存在一些常见无意义的词进行过滤,不做索引
  3. 搜索出来的结果会根据唯一词/索引中词等的总数进行显示

扩展查询


select prod_text 
from product_desc 
where match(note_text) against('rabbit' with query expansion);

搜索出来的结果不仅除了有关键词之外,还有是关键词当前所在的行所存在的关键词,然后依据这些关键词从数据库取出来的结果.

布尔文本高级搜索

全文本布尔操作符

布尔操作符说明
+包含,表示单词必须存在
-排除,表示单词必须不存在
>包含,而且需要增加单词的优先级
<包含,但是需要减少单词的优先级
~取消词的排序值
*词尾的通配符
“”定义一个短语

语法

案例:


select prod_text 
from product_desc 
where match(note_text) against('+rabbit' in Boolean Mode);

搜索当中添加了in Boolean Mode几个关键词,表示启用布尔搜索

注意:

  1. 索引全文本时,三个及三个以下的字符的单词是被索引忽略的
  2. MySQL内部维护了一个非用词(stopword)列表,这些词在索引时将被忽略
  3. 许多词出现的频率很高,搜索他们没有用处,因此当一个词出现在50%以上的行中,将被忽略
  4. 表中的行数少于三行,全文本搜索不返回结果
  5. 忽略单词中的单引号
  6. 仅在MyIsam存储引擎中支持全文本搜索
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值