数据库1-的全文本搜索

InnoDB不支持全文本搜索,而MyISAM支持全文本搜索。

全文本搜索的优点:

        在使用全文本搜索的时候,MySQL不需要分别查看每一行的,不需要分别分析和处理每个词。MySQL只需要创建指定列中的各词的一个索引,搜索就可以针对这些词进行了。这样MySQL可以快速有效的决定哪些词匹配哪些词不匹配以及匹配的频率是多少?

如何使用全文本搜索:

        首先索引被搜索的列,而且根据数据改变不断的重新索引。在对表列中进行适当的设计后,MySQL会自动进行索引和重新索引。再配合着Match()和Against()函数一起使用。

例子:创建索引

CREATE TABLE productnotes
(
    note_id    int        NOT NULL AUTO_INCRMENT,
    prod_id    char(10)   NOT NULL,
    note_data  datetime   NOT NULL,
    note_text  text       NULL,
    PRIMARY    KEY(note_id),
    FULLTEXT(note_text)
)ENGING=MyISAM;

CREAT TABLE定义了productnotes并列出它所包含的列。有一个note_text列,进行全文本搜索时,MySQL根据子句FULLTEXT(note_text)的指示对它进行索引。这里的FULLTEXT索引单个列,也可以索引多个列。且定义之后MySQL会自动的维护索引。增、改、删索引可以随之自动更新。

注意:不要在导入数据的时候使用FULLTEXT,在导入数据时应该先导入数据到一个新表中之后再启用FULLTEXT索引。

进行全文本搜索:使用Match()指定被搜索的列,Against()指定要使用的搜索表达式

例子:

SELECT    note_text
FROM      productnotes
WHERE     Match(note_text) Against('rabbit');

SELECT检索note_text列,用于WHERE子句使用Match(note_text)指定列进行全文本搜索,用Against('rabbot')作为搜索词并返回包含搜索词的行。

注意:搜索不区分大小写,如果想区分加上BINARY关键字

特殊要求:当需要查询一个包含“anvils"词的注释,还要查询与此注释相关的行。

技术:使用查询扩展来完成此要求

例子

SELECT    note_text
FROM      productnotes
WHERE     Match(note_text) Against('rabbit' WITH QUERY EXPANSION);

查询扩展后,带有"anvils"的行在最前面,后面是包含此次的句子中其他词的行也被索引出来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值