sqlite 检索的字段结果前加空格_MySQL5.7分词全文检索思路

通常我们在进行模糊查询时,都是通过SQL语句的Like来查询的,例如搜索文章标题中带“苹果”两个字的,就搜索 where title like ‘%苹果%’这样来得到结果。但有些时候用户输入的是一句话,例如用户输入:都挺好第一集,而数据库中对应的文章标题可能是:《都挺好》第一集,因为加了书名号的原因,通过like来模糊搜索就搜索不到了。解决办法就是使用全文检索。

添加全文索引

将title字段设置为FULLTEXT索引
如果是英文检索,默认已经可以使用了,因为英文单词是通过空格来分隔的,然后中文没有分隔,都是连一起的,所以就需要分词。

设置最小分词索引长度

首先查询当前的分词索引长度,如果没设置过,默认是4

SHOW VARIABLES LIKE 'ft_min_word_len'

如果是4,则代表对4个字及其以上才建立索引,而中文有时候是两个字甚至1个字,所以建议设置为1,设置办法:打开my.ini,在[mysqld]的最后一行添加:

ft_min_word_len=1

重启MySQL并重建索引:

REPAIR TABLE 表名 QUICK;

新建一个title_word字段,添加全文索引

title_word字段用于存储标题的分词。例如将《都挺好》第一集拆分成:都挺好 第一集两个词语,然后存储在title_word字段中。

将用户搜索的句子也分词

现在用户输入:都挺好第一集,首先将都挺好第一集拆分成:都挺好 第一集两个词语,然后在进行全文检索:

SELECT * FROM `articles` where MATCH(`title_word`) AGAINST ('都挺好 第一集')

这样就可以搜索到结果了。

如果是低于5.7版本的MySQL,也可以将汉字分词转为区位码或者base64encode后,就变成了英文和数字,也可以使用全文索引,参考:https://www.mdaima.com/jingyan/43.html

参考文章:https://www.cnblogs.com/ibook360/p/5073313.html

5fc86de9eaffb579e5eb03acdd4d9a18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值