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"));
 

Elasticsearch模糊查询、多字段in查询、时间范围查询,DSL和java API两种方式的更多相关文章

  1. drupal7 覆写node-type.tpl.php获取字段值的两种方式

    字段的机读名称为:field_publication_date <!-- 下面两种方式都可以获取node字段的值--> 出版时间: <?php print date('Y-m-d', ...

  2. 【mybatis】mybatis自定义动态字段查询,mybatis实现动态字段查询,如果某个条件为null,则不查询某个字段,否则就查询某个字段

    mybatis实现动态字段查询,如果某个条件为null,则不查询某个字段,否则就查询某个字段 先看一下 怎么实现动态的自定义字段查询: 例如: 而field 就是数据表中的某一个字段 String f ...

  3. hibernate级联查询映射的两种方式

    Hibernate主要支持两种查询方式:HQL查询和Criteria查询.前者应用较为广发,后者也只是调用封装好的接口. 现在有一个问题,就是实现多表连接查询,且查询结果集不与任何一个实体类对应,怎么 ...

  4. SpringBoot集成Mybatis实现多表查询的两种方式(基于xml)

     下面将在用户和账户进行一对一查询的基础上进行介绍SpringBoot集成Mybatis实现多表查询的基于xml的两种方式.   首先我们先创建两个数据库表,分别是user用户表和account账户表 ...

  5. 五 Mybatis一对一关联查询的两种方式(基于resultType&基于resultMap)

    关联查询: 一个用户对应多个订单,一个订单只有一个用户 订单关联用户:两种方式 一:基于resultTYpe,一个与表关系一样的pojo实现 主表订单,从表用户 首先要有一个与关联查询表关系一样的po ...

  6. 【Django drf】 序列化类常用字段类和字段参数 定制序列化字段的两种方式 关系表外键字段的反序列化保存 序列化类继承ModelSerializer 反序列化数据校验源码分析

    目录 序列化类常用字段类和字段参数 常用字段类 常用字段参数 选项参数 通用参数 序列化类高级用法之source source填写类中字段 source填写模型类中方法 source支持跨表查询 定制 ...

  7. drf-day4——序列化类常用字段和字段参数、序列化类source用法、序列化类定制字段返回内容的两种方式、序列化类的多表关联反序列化保存、反序列化字段校验、ModelSerializer的使用

    目录 一.序列化类常用字段和字段参数(了解) 1.1 常用字段类 1.2 常用字段参数 选项参数: 通用参数: 重点 二.序列化高级用法之source(了解) 2.1 序列化定制字段名字 三.序列化高 ...

  8. 20Mybatis_订单商品数据模型_一对一查询——resultType和resultMap两种方式以及两种方式的总结

    上一篇文章分析了数据模型,这篇文章就给出一个需求,这个需求是一对一查询,并完成这个需求. ------------------------------------------------------- ...

  9. Hibernate查询返回自定义VO的两种方式

    说明:createQuery用的hql语句进行查询,createSQLQuery用sql语句查询: 前者以hibernate生成的Bean为对象装入list返回:后者则是以对象数组进行存储: 一.通过 ...

随机推荐

  1. Elasticsearch方案选型必须了解的10件事!

    文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484372&idx=1&sn=e863e46 ...

  2. Gitlab备份以及恢复

    1.迁移准备工作和思路 从a服务器迁移到b服务器,由于Gitlab自身的兼容性问题,高版本的Gitlab无法恢复低版本备份的数据,需要注意在b服务器部署和a服务器一样版本的gitlab,部署好环境后开 ...

  3. [题解] HDU 5115 Dire Wolf 区间DP

    考虑先枚举所有的物品中最后拿走的,这样就分成了2个子问题,即先拿完左边的,再拿完右边的,最后拿选出的那个.令dp(i,j)表示拿完[i,j]所有物品的最小代价.你可能会说,我们拿[i,j]这一段物品的 ...

  4. postman7种断言的使用

    导航:1.postman断言介绍2.状态码断言3.响应正文断言-包含4.响应正文断言-json字段5.响应头断言6.响应时间断言7.环境变量的断言 - - - - - - - - - 分割线 - - ...

  5. SQL语句——为什么分组函数(多行处理函数)不能用在where语句之后?

    在SQL语句中,常见的分组查询函数为: sum()求和 avg()求平均值 min()求最小值 max()求最大值 count()求数目 在分组函数中有几个重要的特征: 1.分组函数进行时自动忽略nu ...

  6. POJ1985 Cow Marathon (树的直径)

    用两次dfs求出树的直径,这两次dfs可以写在一起,当然为了方便理解,这里是分开写的. 1 //两次dfs求树的重心 2 #include<cstdio> 3 #include<cs ...

  7. Git的使用以及常用命令(详解)

    一. 版本控制工具 什么是版本控制系统? 版本控制系统(Version Control System):是一种记录一个或若干文件内容变化,以便将来查阅特定版 本修订情况的系统.版本控制系统不仅可以应用 ...

  8. 17.MongoDB系列之了解应用程序动态

    1. 查看当前操作 mongos> db.currentOp() { "inprog" : [ { "shard" : "study" ...

  9. 我的Vue之旅 06 超详细、仿 itch.io 主页设计(Mobile)

    第二期 · 使用 Vue 3.1 + TypeScript + Router + Tailwind.css 仿 itch.io 平台主页. 我的主题 HapiGames 是仿 itch.io 的 in ...

  10. 这才是使用ps命令的正确姿势

    这才是使用ps命令的正确姿势 前言 在linux系统当中我们通常会使用命令去查看一些系统的进程信息,我们最常使用的就是 ps (process status).ps 命令主要是用于查看当前正在运行的程 ...