Elasticsearch模糊查询、多字段in查询、时间范围查询,DSL和java API两种方式

项目场景:

Elasticsearch模糊查询某字段、多字段in查询、时间范围查询,通过DSL和java API两种方式


解决方案:

一、模糊查询

wildcard 通配符检索

使用wildcard相当于SQL的like,前后都可拼接*,匹配0到多个任意字符

  1.  
    {
  2.  
    "query": {
  3.  
    "wildcard": {
  4.  
    "name.keyword": "*文件*"
  5.  
    }
  6.  
    }
  7.  
    }
  1.  
    BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
  2.  
    queryBuilder.must(QueryBuilders.wildcardQuery("name.keyword", "*文件*"));

fuzzy 模糊/纠错检索

使用fuzzy类似百度搜索,你输入“周杰伦”,也能查出来“周杰轮”,有纠错能力

  1.  
    {
  2.  
    "query": {
  3.  
    "fuzzy": {
  4.  
    "name.keyword": "*周杰伦*"
  5.  
    }
  6.  
    }
  7.  
    }
  1.  
    BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
  2.  
    queryBuilder.must(QueryBuilders.fuzzyQuery("name.keyword", "周杰伦"));

二、多字段in查询

通过terms实现,类似SQL的in查询,多字段用集合表示

  1.  
    {
  2.  
    "query": {
  3.  
    "bool": {
  4.  
    "must": {
  5.  
    "terms": {
  6.  
    "name":[
  7.  
    "张三",
  8.  
    "李四"
  9.  
    ]
  10.  
    }
  11.  
    }
  12.  
    }
  13.  
    }
  14.  
    }
  1.  
    BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
  2.  
    queryBuilder.must(QueryBuilders.termsQuery("name.keyword", new ArrayList<>()));

三、时间范围查询

from、to为时间范围,include_lower、include_upper为是否包含左右边界

  1.  
    {
  2.  
    "query": {
  3.  
    "bool": {
  4.  
    "must": {
  5.  
    "range": {
  6.  
    "createTime": {
  7.  
    "from": "2022-01-01",
  8.  
    "to": "2022-03-01",
  9.  
    "include_lower": true,
  10.  
    "include_upper": true,
  11.  
    "boost": 1
  12.  
    }
  13.  
    }
  14.  
    }
  15.  
    }
  16.  
    }
  17.  
    }
  1.  
    BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
  2.  
    queryBuilder.must(QueryBuilders.rangeQuery("createTime").gte("2022-01-01").lte("2022-03-01"));
 

最新文章

  1. for xml path 将单表中一个字段用逗号分隔
  2. ASIHttpRequest 使用理解
  3. systemd在各个linux发行版的普及
  4. 【转载】Oracle实例和Oracle数据库(Oracle体系结构)
  5. OpenJudge 2787 算24
  6. 获取当前页面的url
  7. 使用JavaScript进行数组去重——一种高效的算法
  8. 第二次冲刺spring会议(第二次会议)
  9. JavaSE教程-03深入探究原码,反码,补码-扩展
  10. Java-IO之对象输入流输出流(ObjectInputStream和ObjectOutputStream)
  11. SQLServer中PRECISION和LENGTH,还有SCALE的区别
  12. Linux scp 命令卡住的原因
  13. Linux unalias命令 取消别名
  14. [android] 插入一条记录到系统短信应用里
  15. angular 获取ng-repeat完成状态 $last
  16. 班级作业:Java Web环境的搭建
  17. CentOS(6.8)7 安装 Mysql 5.7
  18. 在使用SQLServer时忘记sa账号密码解决办法
  19. centos7 安装jenkenis
  20. [svc]salt基本原理

热门文章

  1. MySQL 中 datetime 和 timestamp 的区别与选择
  2. 基于CentOS 8服务器来搭建FastDFS高可用集群环境
  3. nsis制作新版迅雷安装界面
  4. Goland Socket 服务
  5. 谣言检测(DUCK)《DUCK: Rumour Detection on Social Media by Modelling User and Comment Propagation Networks》
  6. Dest0g3迎新赛misc部分解析
  7. 基于vite3+tauri模拟QQ登录切换窗体|Tauri自定义拖拽|最小/大/关闭
  8. Sentinel 介绍与下载使用
  9. 九、docker swarm主机编排
  10. 以开发之名 | bilibili会员购让IP在眼前动起来