springboot+Elasticsearch 复杂查询
以前没做过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 复杂查询的更多相关文章
- springboot elasticsearch 集成注意事项
文章来源: http://www.cnblogs.com/guozp/p/8686904.html 一 elasticsearch基础 这里假设各位已经简单了解过elasticsearch,并不对es ...
- springboot集成elk 一: springboot + Elasticsearch
1.ELK介绍 1> Elasticsearch是实时全文搜索和分析引擎, 提供搜集.分析.存储数据三大功能: 是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统. ...
- 【转】elasticsearch的查询器query与过滤器filter的区别
很多刚学elasticsearch的人对于查询方面很是苦恼,说实话es的查询语法真心不简单- 当然你如果入门之后,会发现elasticsearch的rest api设计是多么有意思. 说正题,ela ...
- 基于百度地图SDK和Elasticsearch GEO查询的地理围栏分析系统(1)
本文描述了一个系统,功能是评价和抽象地理围栏(Geo-fencing),以及监控和分析核心地理围栏中业务的表现. 技术栈:Spring-JQuery-百度地图WEB SDK 存储:Hive-Elast ...
- Elasticsearch Kibana查询语法
Elasticsearch Kibana查询语法 2018年06月03日 23:52:30 wangpei1949 阅读数:3992 Elasticsearch Kibana Discover的搜 ...
- ElasticSearch—分页查询
ElasticSearch查询—分页查询详解 Elasticsearch中数据都存储在分片中,当执行搜索时每个分片独立搜索后,数据再经过整合返回.那么,如何实现分页查询呢? 按照一般的查询流程来说,如 ...
- Elasticsearch 邻近查询示例
Elasticsearch 邻近查询示例(全切分分词) JAVA API方式: SpanNearQueryBuilder span = QueryBuilders.spanNearQuery(); s ...
- elasticsearch简单查询
elasticsearch简单查询示例: { "from": "0", //分页,从第一页开始 "size": "10" ...
- ElasticSearch高级查询
ElasticSearch高级查询 https://www.imooc.com/video/15759/0 ElasticSearch查询 1,子条件查询:特定字段查询所指特定值 1.1query c ...
- elasticsearch 分页查询实现方案——Top K+归并排序
elasticsearch 分页查询实现方案 1. from+size 实现分页 from表示从第几行开始,size表示查询多少条文档.from默认为0,size默认为10,注意:size的大小不能超 ...
随机推荐
- Stream中的常用方法_count-Stream中的常用方法_limit
package A_Lian_two.D04; import java.util.stream.Stream; public class Demo06Stream_limit { public sta ...
- 练习_使用递归计算1-n之间的和-练习_使用递归计算阶乘
练习_使用递归计算1-n之间的和 定义一个方法,使用递归计算1-n之间的和 1+2+3+. . .+n n+(n-1)+(n-2)+...+1 已知: 最大值:n 最小值:1 使用递归必须明确: 1. ...
- 编程哲学之 C# 篇:006——什么是 .NET
本章将用本系列第二章中提到的 类比 思维来让读者快速了解什么是.NET. 当年在网上看到一个初学者问<Java编程思想>第一章看不懂怎么办.然后我发现在很多经典的技术书中,如<C#入 ...
- MySQL-数据库、MySQL
1.存取数据的演变史 1.文本文件: 文件路径不固定(导致代码兼容性下降) 数据格式不统一:(max|123, max_123) 2.软件开发目录规范: 1.规定了数据应该保存在db目录下>&g ...
- 【一句话】Redis的3中缓存策略
首先一句话: 旁路缓存模式策略:写->写DB,删缓存,读->读cache,没有则读DB,然后更新到缓存 读写穿透策略:写->写缓存,然后由缓存系统写DB,读->读cache,没 ...
- 亲测有效! Wondershare UniConverterV14.1.7 Wondershare PDFelement Professional V9.3.3 含(win/mac版)
亲测有效! Wondershare UniConverterV14.1.7 Wondershare PDFelement Professional V9.3.3 含(win/mac版) Wonde ...
- Ubuntu18.04编译ZLMediakit支持webrtc
背景 最近在做流媒体相关的一些东西, 比较了一些开源的流媒体服务, 目前 srs 和 ZlmediaKit 项目是评价比较高的, 今天主要在 Ubuntu18.04 上编译 ZlmediaKit, 并 ...
- JWT的原理及使用
目录 JWT的原理及使用 一.什么是JWT? 二.签发认证流程 三.使用方法 1.设置登录接口 2.设置过期事件 3.定制返回格式 4.配置认证类和权限类 5.写登录逻辑 5.配路由 JWT的原理及使 ...
- 大规模 IoT 边缘容器集群管理的几种架构-2-HashiCorp 解决方案 Nomad
前文回顾 大规模 IoT 边缘容器集群管理的几种架构-0-边缘容器及架构简介 大规模 IoT 边缘容器集群管理的几种架构-1-Rancher+K3s ️Reference: IoT 边缘计算系列文章 ...
- JZOJ 3226. 【HBOI2013】ALO
题目 网上自己搜 解析 区间异或很容易想到可持久化字典树 但本题的关键是如何高效率求出以某个数为区间最大值时这个区间的范围 依题我们知道区间最长可到比它第二大的位置(开区间) 所以我们如果能找到每个数 ...