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. 等保审核 --- MySQL密码复杂度--和连接错误超时等

    系统版本: Centos 7 MySQL版本: 5.7.19 架构: 主从架构 审计插件: validate_password.so(数据库自带5.6后版本都拥有此插件) 操作过程: 1). 安装va ...

  2. PVC-U排水管及管件

  3. 我的Vue之旅、05 导航栏、登录、注册 (Mobile)

    第一期 · 使用 Vue 3.1 + TypeScript + Router + Tailwind.css 构建手机底部导航栏.仿B站的登录.注册页面. 代码仓库 alicepolice/Vue-05 ...

  4. String类型变量的使用

    1.String属于引用数据类型,翻译为:字符串 2.声明String类型变量时,使用一对"" 3.String可以和8种基本数据类型变量做运算,且运算只能是连接运算:+ 4.运算 ...

  5. <jsp:useBean>动作的使用

    jsp:useBean动作的使用 jsp:useBean动作用于在指定的范围内寻找指定名称的JavaBean对象,如果找到,则返回该对象的引用可以操作里边的属性.如果没有找到则重新实例化一个对象.并且 ...

  6. sentinel的四种流控规则介绍

    sentinel的四种流控规则介绍 今天的内容我们主要围绕四个点进行展开介绍. 流控模式 :关联.链路 流控效果 :Warm Up.排队等待 这四点具体是什么意思呢? 首先启动项目:cloud-ali ...

  7. Shell揭秘——程序退出状态码

    程序退出状态码 前言 在本篇文章当中主要给大家介绍一个shell的小知识--状态码.这是当我们的程序退出的时候,子进程会将自己程序的退出码传递给父进程,有时候我们可以利用这一操作做一些进程退出之后的事 ...

  8. 3.pygame快速入门-游戏循环及动画实现

    游戏循环的开始,意味着游戏的正式开始,游戏循环的作用如下 1.保证游戏不会直接退出 2.变化图像的位置--动画效果 3.检测用户交互--按键.鼠标等     游戏时钟 pyagame提供了一个pyga ...

  9. 虚拟机里网络连接的几种方式说明(桥接,NAT, 仅主机)

    虚拟机里网络连接类型的选择: 桥接:选择桥接模式的话虚拟机和宿主机在网络上就是平级的关系,相当于连接在同一交换机上. NAT:NAT模式就是虚拟机要联网得先通过宿主机才能和外面进行通信. 仅主机:虚拟 ...

  10. 谷歌浏览器xpath获取网页按钮路径

    谷歌浏览器打开要获取的页面按下F12打开开发者工具 点击最左边的元素选择器,高亮后光标移动到对应元素框(这里只选择里层的元素,如这里要选到input级别) 点击后下方HTML会高亮显示,鼠标移动上去右 ...