以前没做过ES 里面的查询,第一次接触还是走了点弯路的。

就是这个字段你在ES 都不用模糊查的话,就可以设置 type = FieldType.Keyword,比如ID之类的。

一:建ES存储的实体

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType; import javax.persistence.Id;
import java.io.Serializable;
import java.util.Date; /**
* @ClassName: MaskCallbackES
* @Description: 未戴口罩ES实体
* @Author ***
* @Date 2022/12/07 14:01
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
//indexName名字如果是字母那么必须是小写字母
@Document(indexName = "mask_callback")
public class MaskCallbackES implements Serializable { private static final long serialVersionUID = 4L; @Id
@Field(store = true, type = FieldType.Keyword)
private String id; /**
* 设备编号
*/
@Field(index = false, store = true, type = FieldType.Keyword, fielddata = true)
private String cameraId; /**
* 算法类型
*/
@Field(index = false, store = true, type = FieldType.Keyword)
private String violateType; /**
* 告警描述
*/
@Field(index = false, store = true, type = FieldType.Auto)
private String violateDescription; /**
* 创建时间
*/
@Field(index = false, store = true, type = FieldType.Date)
private Date createTime; /**
* 算法推送时间
*/
@Field(index = false, store = true, type = FieldType.Auto)
private Date time; /**
* 未戴口罩的数量
*/
@Field(index = false, store = true, type = FieldType.Auto)
private Integer noMask; /**
* 戴口罩的数量
*/
@Field(index = false, store = true, type = FieldType.Auto)
private Integer wearMask;
}

二: 建类似于mybatis 的 Mapper,来操作ES

import ideal4j.pfa.openapi.model.MaskCallbackES;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; /**
* 口罩识别算法保存ES mapper
* @author: ***
* @since: V2.0.0
* @date: 2022/12/07 14:20
*/
public interface MaskCallbackESMapper extends ElasticsearchRepository<MaskCallbackES, String> { }

三:通过mapper search实现复杂查询,查询ES中所有匹配EquipmentId集合的数据,分页+按time 倒叙,至于是keyBuilder.should,还是queryBuilder.must,参考https://blog.csdn.net/pshaoyi/article/details/118418310

       List<String> collect = callbackList.stream().map(ShopVo::getEquipmentId).collect(Collectors.toList());
keyBuilder.should(QueryBuilders.termsQuery("equipmentId.keyword",collect));
queryBuilder.must(keyBuilder);
QueryBuilder qb = QueryBuilders.rangeQuery("picTime").
gte(DateUtils.parseCalendarDate(createTime,DateUtils.PATTERN_OF_DATE_TIME_EN).getTimeInMillis())
.lte(cal.getTimeInMillis());
queryBuilder.must(qb);
//这边的分页只能算是form-size的浅层分页,如果数据量大的话,建议改造成scroll深度分页
Pageable pageable = PageRequest.of(page-1, pageSize, Sort.Direction.DESC,"picTime");
Iterable<ExtCallbackStatisticsES> aIterable = extCallbackStatisticsESMapper.search(queryBuilder,pageable);
return IteratorUtils.toList(aIterable.iterator());

  

springboot+Elasticsearch 复杂查询的更多相关文章

  1. springboot elasticsearch 集成注意事项

    文章来源: http://www.cnblogs.com/guozp/p/8686904.html 一 elasticsearch基础 这里假设各位已经简单了解过elasticsearch,并不对es ...

  2. springboot集成elk 一: springboot + Elasticsearch

    1.ELK介绍 1> Elasticsearch是实时全文搜索和分析引擎, 提供搜集.分析.存储数据三大功能: 是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统. ...

  3. 【转】elasticsearch的查询器query与过滤器filter的区别

    很多刚学elasticsearch的人对于查询方面很是苦恼,说实话es的查询语法真心不简单-  当然你如果入门之后,会发现elasticsearch的rest api设计是多么有意思. 说正题,ela ...

  4. 基于百度地图SDK和Elasticsearch GEO查询的地理围栏分析系统(1)

    本文描述了一个系统,功能是评价和抽象地理围栏(Geo-fencing),以及监控和分析核心地理围栏中业务的表现. 技术栈:Spring-JQuery-百度地图WEB SDK 存储:Hive-Elast ...

  5. Elasticsearch Kibana查询语法

    Elasticsearch Kibana查询语法 2018年06月03日 23:52:30 wangpei1949 阅读数:3992   Elasticsearch Kibana Discover的搜 ...

  6. ElasticSearch—分页查询

    ElasticSearch查询—分页查询详解 Elasticsearch中数据都存储在分片中,当执行搜索时每个分片独立搜索后,数据再经过整合返回.那么,如何实现分页查询呢? 按照一般的查询流程来说,如 ...

  7. Elasticsearch 邻近查询示例

    Elasticsearch 邻近查询示例(全切分分词) JAVA API方式: SpanNearQueryBuilder span = QueryBuilders.spanNearQuery(); s ...

  8. elasticsearch简单查询

    elasticsearch简单查询示例: { "from": "0", //分页,从第一页开始 "size": "10" ...

  9. ElasticSearch高级查询

    ElasticSearch高级查询 https://www.imooc.com/video/15759/0 ElasticSearch查询 1,子条件查询:特定字段查询所指特定值 1.1query c ...

  10. elasticsearch 分页查询实现方案——Top K+归并排序

    elasticsearch 分页查询实现方案 1. from+size 实现分页 from表示从第几行开始,size表示查询多少条文档.from默认为0,size默认为10,注意:size的大小不能超 ...

随机推荐

  1. Java 进阶P-3.5+P-3.6

    对象数组的for-each循环 for-each是用于遍历数组的另一种形式的for循环.for-each循环显着减少了代码,并且循环中没有使用索引或计数器. 句法: For(<数组/列表的数据类 ...

  2. 【学习笔记】Http请求方法总结

    Http常用请求方法对比 请求方法 常见参数传递方式 是否幂等 说明 API举例 GET URL,注意:Http协议对URL长度没有限制,所谓的限制是浏览器和处理服务器的 幂等 用于查询 批量查询:/ ...

  3. 关于Mysql外键从新学习

    关于Mysql外键从新学习 参考:https://blog.csdn.net/u010373419/article/details/9321331 说实话,这是一个抄剩饭的文档. 为什么会从新学习外键 ...

  4. JAVA虚拟机23---JAVA与线程

    1 线程简介 线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址.文件I/O等),又可以独立调度 目前线程是Java里面进行处 ...

  5. 亲测有效! TG Pro 实时温度工具 V2.7.6 for mac 破解版

    亲测有效! TG Pro 实时温度工具 V2.7.6 for mac 破解版 TG Pro (Temperature Gauge Pro) 是一款专业显示你的Mac实时温度的软件,可以在系统内的菜单栏 ...

  6. Centos7搭建hadoop3.3.4分布式集群

    目录 1.背景 2.集群规划 2.1 hdfs集群规划 2.2 yarn集群规划 3.集群搭建步骤 3.1 安装JDK 3.2 修改主机名和host映射 3.3 配置时间同步 3.4 关闭防火墙 3. ...

  7. TCP/IP协议(9): UDP(User Datagram Protocol) 协议 —— 最简单的传输层协议

    TCP/IP协议(9): UDP(User Datagram Protocol) 协议 -- 最简单的传输层协议 关于用户数据报协议(User Datagram Protocol, UDP)协议 UD ...

  8. jenkins简单安装及配置(Windows环境

    jenkins简单安装及配置(Windows环境) jenkins是一款跨平台的持续集成和持续交付.基于Java开发的开源软件,提供任务构建.持续集成监控的功能,可以使开发测试人员更方便的构建软件项目 ...

  9. Appium自动化(一)-window环境搭建详细教程

    一.软件环境所需要运用的工具 1.JAVA1.8.1以上环境 2.AndroidSDK 3.Appium Desktop(appium servers) 4.Appium Client 5.Appiu ...

  10. LG P2617 Dynamic Rankings

    \(\text{Problem}\) 动态区间第 \(k\) 小 Dynamic Rankings \(\text{Analysis}\) 整体二分 原本一个询问可二分,但多个询问效率太低 考虑离线, ...