- 背景:在做海外主数据项目的时候,PM提出了一个需求,说是类似于搜索的功能。但是需要实现根据输入的字符串进行相似度的查询,并且计算出输入的字符串与查出的字符串的相似度是多少。
- 思考:第一次听到需求的时候感觉还挺简单的,以为不就是个迷糊查询吗?但仔细一想,确实是有点出入的,模糊查询可能并不能很好的完成此次需求;
- 因为是这样的假设你输入的 字符串为 "ABC" ,数据库使用模糊查询出来的数据,包含的数据可能会是:“ABC”,"1ABC","11ABC","ABC1",等等之类的数据,但是都有一个共性,"ABC"必须是连着的,所以导致:"AB","BC"这样的数据出不来。这个时候假如说,我是一个用户,我想要的是:"AC",模糊查询不能给到想要的:"AC";,但是引入ES框架又太沉,申请资源啥的很麻烦。所以思考再三,能不能利用现有的资源来完成这样的需求;
- 解决方案:
- 在mysql的5.7版本之后,是自带的有分词器的`ngram`,其可以支持中文、英文、日文、韩文分词;
- 只需在所需要的字段加上全文索引并且引用这个分词器,语句如下
-
<
如何玩mysql5.7实现分词查询,来实现类似ES的效果
于 2022-09-22 15:12:22 首次发布