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. OSF--网络类型

    ABR:区域边界路由器ASBR:自治区域系统边界路由器区域部署原则:    存在vlink本地网络一定是有问题的.他只是作为一种过度技术,在vlink里无法实现认证! 配置:   [r2-ospf-a ...

  2. Jupyter notebook导入Pycharm项目的.py文件里的模块及方法

    Jupyter notebook导入Pycharm项目种的.py文件里的模块及方法 需要在Jupyter notebook里调用自己写的代码,过程如下. 首先在Pycharm里写好一个文件,例如DCC ...

  3. Go微服务实战 - 从0到1搭建一个类Instagram应用(持续更新)

    概要 近几年各大移动应用基本都有社区Community(或动态Moments)的功能,展现形式各不相同,比如 国内的有:微博.朋友圈.抖音.小红书.keep.绿洲.即刻等 国外的有:Instagram ...

  4. Java中的多线程的创建方式

    首先理清几个基本概念: 程序:为完成特定任务,用某种语言编写的一组指令的集合.即一段静态的代码(还没运行起来) 进程:是程序的一次执行过程,也就是说程序运行起来了,加载到了内存中,并占用了cpu的资源 ...

  5. OnionArch - 如何实现更新指定字段的通用Handler

    博主最近失业在家,找工作之余,自己动手写了个洋葱架构(整洁架构)解决方案,以总结和整理以前的项目经验,起名叫OnionArch,其目的是为了更好的实现采用DDD(领域驱动分析)和命令查询职责分离(CQ ...

  6. Kafka之概述

    Kafka之概述 一.消息队列内部实现原理 (1)点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除) 点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信息,而不是将消 ...

  7. Dubbo2.7详解

    Spring与Dubbo整合原理与源码分析 [1]注解@EnableDubbo @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTI ...

  8. python基础之if条件控制语句

    前言 本文主要介绍控制流程中的if条件语句,包括if...:if...else...:if...elif...elif...else...:if...if...if...else...:if嵌套等.内 ...

  9. IO模型及高性能网络架构分析

    前言 操作系统一次IO调用过程 应用程序发起的一次IO操作包含两个阶段: IO调用:应用程序进程向操作系统内核发起调用. IO执行:操作系统内核完成IO操作. 操作系统内核完成IO操作还包括两个过程: ...

  10. element-plus 消息提示

    用来显示「成功.警告.消息.错误」类的操作 <template> <el-button :plain="true" @click="open2" ...