以前没做过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. 当LOGO设计与世界文化擦出火花——JJQ的LOGO设计之路

      <当LOGO设计与世界文化碰撞出火花--论 JJQ 的LOGO是如何制成的> (友链:https://tg.hszxoj.com/user/475) 首先我们对jjq对应的汉字进行拉长 ...

  2. Java 进阶P-4.4+P-4.5

    子类和父类的关系 在java中规定:一个父类可以有多个子类,但是一个子类只能有一个父类.子类可以通过extends关键字来继承父类.做个比较通俗的比喻,就像一个父亲可以有多个亲孩子,但是一个孩子只能有 ...

  3. 【Azure Cache for Redis】Python Djange-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')

    问题描述 使用Python连接Azure Redis服务,因为在代码中使用的是Djange-redis组件,所以通过如下的配置连接到Azure Redis服务: CACHES = { "de ...

  4. Vue13 样式动态绑定

    1 class样式的动态绑定 1.1 说明 通过命令v-bind:class设置一个对象,动态切换class.可以简写为:class. class=""可以和:class=&quo ...

  5. JAVA虚拟机22-原子性、可见性与有序性、先行发生原则

    1 简介 Java内存模型是围绕着在并发过程中如何处理原子性.可见性和有序性这三个特征来建立的,我们逐个来看一下哪些操作实现了这三个特性   2 原子性 2.1 操作指令 由Java内存模型来直接保证 ...

  6. vscode在UBUNTU下使用CMAKE编译

    打开一个含有CMakeLists.txt的文件夹 在.vscode要建立三个json文件才能对Cmake工程进行编译和调试,分别是c_cpp_properties.json,launch.json和t ...

  7. STM32F0_HAL初始化系列:输入捕捉

    1.使用的TIM1,配置如下: 2.代码: int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_TIM1_Ini ...

  8. 【译】.NET 7 中的性能改进(三)

    原文 | Stephen Toub 翻译 | 郑子铭 PGO 我在我的 .NET 6 性能改进一文中写了关于配置文件引导优化 (profile-guided optimization) (PGO) 的 ...

  9. clicknium-划时代的自动化

    说起UI自动化,selenium一直是不可替代的存在,它的安装量.百度数量已经奠定了它在自动化.爬虫等相关领域的霸主低位,可以说,只要涉及到UI自动化,选selenium就对了. 细数过往,相关的UI ...

  10. Postgresql索引浅析

    一.摘要 1.索引是提高数据库性能的常用途径.比起没有索引,使用索引可以让数据库服务器更快找到并获取特定行.但是索引同时也会增加数据库系统的日常管理负担,因此我们应该聪明地使用索引. 2.索引其实就是 ...