全文本搜索

理解全文本搜索

  • 比LIKE、正则表达式更智能,不会因数据量增大损失性能。

并非所有引擎都支撑全文本

  • 最常用的两个引擎MyISAM和InnoDB,前者支撑全文本搜索,而后者不支持。

使用全文本搜索

  为进行全文本搜索,必须索引被搜索的列,而且要随着数据的改变不断地重新索引。对表列进行适当设计后,MySQL会自动进行所有的索引和重新索引。
  在索引之后,SELECT可与Match()和Against()一起使用以实际执行搜索。

启用全文本搜索支持

CREATE TABLE productnotes(
    note_id int NOT NULL AUTO_INCREMENT,
    prod_id char(10) NOT NULL,
    note_date datetime NOT NULL,
    note_text text NULL,
    PRIMARY KEY(note_id),
    FULLTEXT(note_text)  #此处是全文本搜索
)ENGINE=MyISAM  #更换为MyISAM引擎
  • Match()内的值必须与FULLTEXT()定义中的相同,如果指定多个列,则必须顺序正确的列出它们。
  • 为进行全文本搜索,MySQL根据FULLTEXT(…)的指示对它进行索引,()中可以索引单个列,也可以多个。
  • FULLTEXT(…)尽量在create table 表名(…)中的最后面。

布尔文本搜索(没FULLTEXT也可用)

  • 要匹配的词
  • 要排斥的词
  • 排列提示(某词比某词更重要,更重要的词等级更高)
  • 表达式分组
    例如:
SELECT note_text FROM productnotes
WHERE Match(note_text)
Against('heavy -rope*' IN BOOLEAN MODE);
\#意思是匹配词heavy,但排除包含rope的词或者行  
布尔文本操作符描述
+包含,词必须存在
-排斥,词必须不存在
>包含,且增加等级
<包含,且减少等级
( )把词组成子表达式
~取消一个词的排序值
*词尾的通配符
“”定义一个短语

注意!

  • 不要在导入数据时使用FULLTEXT:更新索引花时间,如果正在导入数据到一个新表,则不该此时启用FULLTEXT索引。应首先导入数据,然后修改表,定义FULLTEXT。
  • 如果一个词的频率出现超过50%则忽略,不用于布尔文本搜索。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值