MYSQL 全文本搜索FULLTEXT,Match,Against,布尔全文搜索

1、mysql的引擎中MYISAM支持全文本搜索,而InnoDB【5.6版本开始支持】不支持文本搜索。

2、为了进行全文本搜索,必须索引被搜索的列,而且要随着数据的改变不断地重新索引。
一般在创建表时启用全文本搜索。 CREATE TABLE 语句接受 FULLTEXT 子句,它给出被索引列的一个逗号分隔的列表。
在定义之后,MySQL自动维护该索引。在增加、更新或删除行时,索引随之自动更新。

3、在索引之后,使用两个函数 Match() 和 Against() 执行全文本搜索,其中 Match() 指定被搜索的列, Against() 指定要使用的搜索表达式。

4、全文本布尔操作符

操作符描述
+包含,词必须存在
-排除,词必须不出现
>包含,而且增加等级值
<包含,且减少等级值
()把词组成子表达式(允许这些子表达式作为一个组被包含、排除、排列等)
~取消一个词的排序值
*词尾的通配符
“”定义一个短语(与单个词的列表不一样,它匹配整个短语以便包含或排除这个短语)

5、创建表案例

CREATE TABLE `good` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `name` varchar(128) NOT NULL COMMENT '商品名称',
  `price` int(20) NOT NULL COMMENT '单价(单位:分)',
  `content` text NOT NULL COMMENT '内容',
  `create_time` datetime NOT NULL COMMENT '添加时间',
  PRIMARY KEY (`id`),
  FULLTEXT (`name`,`content`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

6、无索引时添加FULLTEXT 索引

ALTER TABLE `good` ADD FULLTEXT INDEX `name` (`name`, `content`) WITH PARSER ngram;

7、查询扩展实例

/*测试后发现速度很慢*/
SELECT * FROM good  WHERE Match(name,content) AGAINST('欧式 中式' WITH QUERY EXPANSION);

8、布尔文本搜索
即使没有 FULLTEXT 索引也可以使用,但效率非常低下
关键字 IN BOOLEAN MODE

SELECT * FROM good WHERE Match(name,content) AGAINST('+欧式 中式' IN BOOLEAN MODE);

注意 MATCH (name,content) 里面的值必须是前面建立全文索引的两个字段不能少

9、mysql 默认支持全文检索的字符长度是4,可以用SHOW VARIABLES LIKE ‘ft_min_word_len’ 来查看指定的字符长度,也可以在mysql配置文件my.ini 更改最小字符长度,方法是在my.ini 增加一行 比如:ft_min_word_len = 2,改完后重启mysql即可。
单个汉字搜索失败,如有知道的麻烦告诉下,谢谢

10、测试性能(ALTER TABLE good ADD FULLTEXT INDEX name (name) WITH PARSER ngram;)

  • select id,name from good;
    共39265条数据
  • SELECT id,name from good where name like ‘%欧式%’;
    -
  • SELECT id,name from good where MATCH(name) AGAINST(‘欧式’ WITH QUERY EXPANSION);
    在这里插入图片描述
  • SELECT id,name from good where MATCH(name) AGAINST(‘欧式’ IN BOOLEAN MODE);
    -
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咯拉咯啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值