业务场景:筛选项原功能是用mysql左模糊进行过滤查询,现业务要用es,怎么样才能满足原功能,又不损性能。

elasticsearch中有关于模糊查询的操作:wildcard

文档:https://blog.csdn.net/qq_22612245/article/details/82432107

另外的思路解决方案:使用分词

1、筛选项是中文类型

例:商品名称  :无糖麦芽糖口香糖

筛选这种,用中文分词即可满足业务场景

索引定义

"shopname": {
"analyzer": "ik_max_word",
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
}

2、筛选项是字母加数据类型

例:商品代码:abcde0001

因为在mysql中是左模糊,用户可能会筛abcde、abc、ab、abcde0、abcde0001,这种用中文分词就不能满足业务,而用es的wildcard性能不好,

综合考虑使用ngram分词器。

使用方法:

创建索引

{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "ngram",
"min_gram": 2,
"max_gram": 3,
"token_chars": [
"letter",
"digit"
]
}
}
}
},
"mappings": {
"properties": {
"id": {
"type": "keyword"
},
"shopcode": {
"analyzer": "my_analyzer",
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
}
}
}
}
验证方法
POST my_index/_analyze
{
"analyzer": "my_analyzer",
"text": "abcde0001"
}

结果:

"min_gram": 2,"max_gram": 3, 这里是设置切的粒度,如果min设为1的话,切的粒度就太细,会占储存容量。
就算是设置成2,3也要注意因数据量过大分词后所占容量变多的情况

有空格的情况:

 

elasticsearch 7.x 如何满足mysql中的模糊查询功能(like)的更多相关文章

  1. mysql中的模糊查询

    转载自:http://www.letuknowit.com/archives/90/ MySQL中实现模糊查询有2种方式:一是用LIKE/NOT LIKE,二是用REGEXP/NOT REGEXP(或 ...

  2. MySQL中的模糊查询和通配符转义

    MySQL中实现模糊查询有2种方式:一是用LIKE/NOT LIKE,二是用REGEXP/NOT REGEXP(或RLIKE/NOT RLIKE,它们是同义词). 第一种是标准的SQL模式匹配.它有2 ...

  3. MySQL中的模糊查询 like 和 Oracle中的 instr() 函数有同样的查询效果

    注:MySQL中的模糊查询 like 和 Oracle中的 instr() 函数有同样的查询效果: 如下所示: MySQL: select * from tableName where name li ...

  4. sql判断以逗号分隔的字符串中是否包含某个字符串--------MYSQL中利用select查询某字段中包含以逗号分隔的字符串的记录方法

    sql判断以逗号分隔的字符串中是否包含某个字符串---------------https://blog.csdn.net/wttykj/article/details/78520933 MYSQL中利 ...

  5. Vc数据库编程基础MySql数据库的表查询功能

    Vc数据库编程基础MySql数据库的表查询功能 一丶简介 不管是任何数据库.都会有查询功能.而且是很重要的功能.上一讲知识简单的讲解了表的查询所有. 那么这次我们需要掌握的则是. 1.使用select ...

  6. mongo中的模糊查询

    以下是一个mongo查询的综合应用,即介绍一个生产中实际应用的模糊查询,当然其实也很简单,主要用到mongo中的模糊查询和$or查询,以及并的关系,下面是一个mongo中的一条记录 { "_ ...

  7. PHP MYSQL登陆和模糊查询

    PHP MYSQL登陆和模糊查询   PHP版本 5.5.12    MYSQL版本 5.6.17  Apache 2.4.9 用的wampserver 一.PHPMYSQL实现登陆:  一共含有两个 ...

  8. 关于sql、mysql语句的模糊查询分类与详解,包括基本用法和mapper.xml文件里插入写法

    欢迎猿类加qq:2318645572,共同学习进步 实际例子: ssm框架:service业务层->dao层->mappers.xml->junit/test测试 1:service ...

  9. Mybatis中的模糊查询

    今天下午做的一个功能,要用到模糊查询,字段是description,刚开始我的写法用的是sql中的模糊查询语句, 但是这个有问题,只有将字段的全部值传入其中,才能查询,所以不是迷糊查询. 后来经过搜索 ...

随机推荐

  1. Python 多线程Ⅲ

    线程优先级队列( Queue) Python的Queue模块中提供了同步的.线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列Prior ...

  2. Solr full improt时遇到的问题

    安装和配置solr转载于:https://blog.csdn.net/u010510107/article/details/81051795jdk1.8 solr7.2 mysql8.0.17-bin ...

  3. c语言函数分析

    1.vc6的相关使用 1)常用的快捷键 f7    ->编译 f5    ->运行 f9    ->断点 f10    ->单步执行 f11    ->单步执行,可进入函 ...

  4. confirm 弹出信息

    if(confirm("真的要删除吗?")){ alert("点击了确认按钮"); } else{ alert("点击了取消按钮"); } ...

  5. HDU 6154 CaoHaha's staff(2017中国大学生程序设计竞赛 - 网络选拔赛)

    题目代号:HDU 6154 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6154 CaoHaha's staff Time Limit: 2000/1 ...

  6. vue刷新子页面,跳到主页,params传参引起的血案!

    今天,算是真正认识了params传参,为什么说params传参引起了血案? 起因是这样的,我正在做一个登陆的模块,公司想根据url不同的参数来区分是什么类型的会议, 于是后端推荐我用params传参的 ...

  7. vps能ping通但是ssh无法连接

    一.全国ping测试网页https://tools.ipip.net/ping.php 如果100%丢包率,那么肯定被q了,如果没有,也不一定没被q,进入下一步 二.国内外端口扫描测试http://t ...

  8. python3 使用flask连接数据库出现“ModuleNotFoundError: No module named 'MySQLdb'”

    本文链接:https://blog.csdn.net/Granery/article/details/89787348 在使用python3连接MySQL的时候出现了 ‘ModuleNotFoundE ...

  9. fanout(Publish/Subscribe)发布/订阅

    引言 它是一种通过广播方式发送消息的路由器,所有和exchange建立的绑定关系的队列都会接收到消息 不处理路由键,只需要简单的将队列绑定到交换机上 fanout交换机转发消息是最快的,它不需要做路由 ...

  10. TCP 之 FIN_WAIT_2状态处理流程

    概述 在主动关闭方发送了FIN之后,进入FIN_WAIT_1状态,在此状态收到了ACK,则进入FIN_WAIT_2状态,而FIN_WAIT_2后续要做的工作是等待接收对端发过来的FIN包,并且发送AC ...