数据库学习笔记——全文本搜索

  • 理解全文本搜索
  • 使用全文本搜索
    • FULLTEXT(note_text)启用全文本搜索支持:一般在创建表时启用全文本搜索。CREATE TABLE接受FULLTEXT字句,它给出被索引列的一个逗号分隔的列表。
    • create table 表名{主键,字段1 类型为text,fulltext(字段1)engine=myisam}
create table product{
id int not null primary key,
c1 text,
c2 text,....
fulltext(c1,c2....) engine myisam
}
  • match(查询的列) against(‘匹配的内容‘’)进行全文本搜索

注意:使用全文本搜索时,查询结果排序:返回以文本匹配的良好程度排序的数据(匹配度高的,匹配位置靠前的数据排在前面)

select c1 from product where match(c1) against('note')
查找产品表中,c1列中匹配“note”字符串的数据

  • match() against(’’ with query expensor)使用查询扩展:MySQL对数据和索引进行两遍扫描来完成搜索。

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

2.然后,MySQL检查这些匹配行并选择所有有用的词。

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

利用查询扩展,能找出所有可能相关的结果,即时它们并不精确包含所有查找的词,增大检索返回结果

select C1 from product where match(c1) against('note' with query expansion)
查询结果中不仅含有匹配note的数据,还可以查到匹配到:含有note的结果中其他内容的数据

-in boolean mode 布尔文本搜索

  • 布尔操作符说明
    + 包含,词必须存在
    - 排除,词必须不出现
    > 包含,而且增加等级值
    < 包含,且减少等级值
    () 把词组成子表达式(允许这些子表达式作为一个组被包含、排除、排列等)
    ~ 取消一个词的牌谑值
    * 词尾的通配符
    “” 定义一个短语(与单个词的列表不一样,它匹配整个短语以便包含或排除这个短语)
 match() against('内容1' in boolean mode)——查询符合内容的数据
   match() against('内容1 -内容2' in boolean mode)——查询匹配内容1,但是不包含内容2
    match() against('内容1 +内容2' in boolean mode)——查询匹配内容1,而且必须包含内容2
   match() against('+内容1 -内容2' in boolean mode)——查询必须匹配内容1,而且不包含内容2
   match() against('内容1 内容2' in boolean mode)——查询符合或者匹配内容1,或者匹配内容2
   match() against('"内容1 内容2 "' in boolean mode)——查询符合匹配“内容1 内容2”
   match() against('<内容1 >内容2 "' in boolean mode)——查询符合匹配内容1或者 内容2,且增加内容2的等级,降低内容1的等级
  • 全文本搜索的使用说明
    1、当匹配短词(含有三个或者三个一下字符的词),匹配时容易被忽略,从索引中删除
    2、50%规则:如果一个词在50%以上的行数中出现,则将他忽略(50%规则不适用于in boolean mode)
    3、如果表中行数小于3行,那么全文检索将不会返回结果
    4、全文本搜索会忽略单引号’
    5、全文本检索默认不区分大小写(可以使用binary来实现区分大小写功能)
    6、全文本检索速度快,尽量使用全文本检索,少使用like
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值