fulltext

titledatedraft
Fulltext
2022-04-10 18:14:07 +0800
false

全文索引

原本是想利用全文索引解决简单的查询优化,但使用了之后发现一些问题。

配置问题

全文索引都会涉及到一个最小分词长度长度的配置;

#在mysql查询配置
SHOW VARIABLES LIKE '%ft%';
#myism最小分词长度
ft_min_word_len
#innodb最小分词长度
innodb_ft_min_token_size

#查询中文分词引擎ngram的分词长度
SHOW VARIABLES LIKE '%ngram%';
ngram_token_size

如果都设置为2以及大于2,那么只有1个字符的模糊处理如何做?设为1,分词会使数据量太多?

sql问题

默认的创建全文索引

ALTER TABLE `user` ADD FULLTEXT INDEX `username`(`username`);

含有中文的分词引擎需要使用ngram

ALTER TABLE `user` ADD FULLTEXT INDEX `name`(`name`) with parser ngram;

在常见情况下都是用户对一些字段输入一个搜索值进行联合查询,例如名字是多少,用户名是多少,反应sql上就会是

SELECT * from USER where match(name) against('xxx' in boolean mode) and match(username ) against('xxx' in boolean mode) limit 10;

不用自然语言模式(IN NATURAL LANGUAGE MODE)而是布尔模式(in boolean mode)

但是匹配的结果并不是预想的类似模糊匹配的效果 x x

匹配的是只含有wx的结果,但是like模糊结果时是 x 因此全文索引返回的到底是一个什么结果? 查看5.7的官方文档https://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html 提到在自然语言模式会受到一些停用词影响,但在布尔模式中不会受影响,但其结果仍然与like相差甚远 x

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值