ES 去重/聚合查询
es 安装版本为 7.14.0
springboot 有默认的版本,防止冲突设置如下
<properties>
<java.version>1.8</java.version>
<elasticsearch.version>7.14.0</elasticsearch.version>
</properties>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author 一休
* @date 2021/10/19 14:52
*/
@Configuration
public class EsClientConfig {
@Value("${es.url}")
private String[] esUrls;
@Value("${es.username}")
private String esUserName;
@Value("${es.password}")
private String esPassword;
@Bean
public RestHighLevelClient restHighLevelClient() {
// 测试
RestClientBuilder builder = RestClient.builder(new HttpHost("192.168.202.128", 9200, "http"));
RestClient client = builder.build();
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(client);
return restHighLevelClient;
//账号密码连接
/* HttpHost[] hosts = new HttpHost[esUrls.length];
for (int i = 0; i < esUrls.length; i++) {
String[] strings = esUrls[i].split(":");
hosts[i] = new HttpHost(strings[0], Integer.parseInt(strings[1]));
}
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(esUserName, esPassword));
RestClientBuilder builder =
RestClient.builder(hosts).setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
}
});
return new RestHighLevelClient(builder.build());*/
}
}
去重查询
@Resource
private RestHighLevelClient client;
@Test
void contextLoads() throws Exception {
SearchRequest request = new SearchRequest();
request.indices("students").types("student");
// 构建搜索条件
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//指定去重字段
CollapseBuilder collapseBuilder = new CollapseBuilder("name.keyword");
// 查询去重后的结果数量
CardinalityAggregationBuilder aggregationBuilder = AggregationBuilders.cardinality("name").field("name.keyword");
sourceBuilder.collapse(collapseBuilder);
sourceBuilder.aggregation(aggregationBuilder);
sourceBuilder.size(1000);
request.source(sourceBuilder);
SearchResponse response = client.search(request);
System.out.println(JSON.toJSONString(response.getAggregations()));
SearchHits hits = response.getHits();
System.out.println(hits.getHits().length);
System.out.println(JSON.toJSONString(hits));
for (SearchHit hit : hits) {
System.out.println(JSON.toJSONString(hit.getSource()));
}
}
聚合取值 、重点获取桶内数据
@Test
void contextLoads() throws Exception {
SearchRequest request = new SearchRequest();
// 设置索引和type
// request.indices("students").types("student");
// 构建搜索条件
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
// 分组,排序 :key 和 hit 为自定义,第二个参数为 条件查询字段
TermsAggregationBuilder terms = AggregationBuilders.terms("key").field("recText.keyword")
.subAggregation(AggregationBuilders.topHits("hit").sort("statisDate.keyword", SortOrder.DESC));
sourceBuilder.aggregation(terms);
sourceBuilder.size(1000);
request.source(sourceBuilder);
SearchResponse response = client.search(request);
Long hs = response.getHits().getTotalHits();
System.out.println(hs);
ParsedTerms terms1 = (ParsedTerms) response.getAggregations().getAsMap().get("key");
List<ParsedTerms.ParsedBucket> list = (List<ParsedTerms.ParsedBucket>) terms1.getBuckets();
for (ParsedTerms.ParsedBucket parsedBucket : list) {
System.out.println(parsedBucket.getKeyAsString());
ParsedTopHits topHits = parsedBucket.getAggregations().get("hit");
SearchHit hit = topHits.getHits().getHits()[0];
String time = hit.getSourceAsMap().get("createTime").toString();
System.out.println(time);
return;
}
ES 去重/聚合查询的更多相关文章
- ES系列九、ES优化聚合查询之深度优先和广度优先
1.优化聚合查询示例 假设我们现在有一些关于电影的数据集,每条数据里面会有一个数组类型的字段存储表演该电影的所有演员的名字. { "actors" : [ "Fred J ...
- ElasticSearch 实现分词全文检索 - 聚合查询 cardinality
目录 ElasticSearch 实现分词全文检索 - 概述 ElasticSearch 实现分词全文检索 - ES.Kibana.IK安装 ElasticSearch 实现分词全文检索 - Rest ...
- Es学习第九课, 聚合查询和复合查询
ES除了实现前几课的基本查询,也可以实现类似关系型数据库的聚合查询,如平均值sum.最小值min.最大值max等等 我们就用上一课的数据作为参考来举例 聚合查询 sum聚合 sum是一个求累加值的聚合 ...
- ES[7.6.x]学习笔记(十)聚合查询
聚合查询,它是在搜索的结果上,提供的一些聚合数据信息的方法.比如:求和.最大值.平均数等.聚合查询的类型有很多种,每一种类型都有它自己的目的和输出.在ES中,也有很多种聚合查询,下面我们看看聚合查询的 ...
- ElasticSearch(ES)使用Nested结构存储KV及聚合查询
自建博客地址:https://www.bytelife.net,欢迎访问! 本文为博客同步发表文章,为了更好的阅读体验,建议您移步至我的博客 本文作者: Jeffrey 本文链接: https://w ...
- ElasticSearch的高级复杂查询:非聚合查询和聚合查询
一.非聚合复杂查询(这儿展示了非聚合复杂查询的常用流程) 查询条件QueryBuilder的构建方法 1.1 精确查询(必须完全匹配上,相当于SQL语句中的“=”) ① 单个匹配 termQuery ...
- ElasticSearch 6.2 Mapping参数说明及text类型字段聚合查询配置
背景: 由于本人使用的是6.0以上的版本es,在使用发现很多中文博客对于mapping参数的说明已过时.ES6.0以后有很多参数变化. 现我根据官网总结mapping最新的参数,希望能对大家有用处. ...
- python全栈开发day68-ORM操作:一般操作、ForeignKey操作、ManyToManyField、聚合查询和分组查询、F查询和Q查询等
ORM操作 https://www.cnblogs.com/maple-shaw/articles/9403501.html 一.一般操作 1. 必知必会13条 <1> all(): 查询 ...
- java使用elasticsearch分组进行聚合查询(group by)-项目中实际应用
java连接elasticsearch 进行聚合查询进行相应操作 一:对单个字段进行分组求和 1.表结构图片: 根据任务id分组,分别统计出每个任务id下有多少个文字标题 .SQL:select id ...
- Web框架之Django_05 模型层了解(单表查询、多表查询、聚合查询、分组查询)
摘要: 单表查询 多表查询 聚合查询 分组查询 一.Django ORM 常用字段和参数: 常用字段:#AutoFieldint自增列,必须填入参数primary_key = True,当model中 ...
随机推荐
- 【jQuery学习日记】从入门到再入门
1,jQuery介绍 jQuery 是一个 JavaScript 库. jQuery 极大地简化了 JavaScript 编程. 2,入门jQuery jQuery有两大核心:jQuery核心函数和j ...
- php 开发规范
===========================框架========================= · 使用laravel框架,原因:tp的框架路由和orm没有laravel好用 · 使用强 ...
- docker 容器迁移到其他机器
docker 容器迁移到其他机器思路为:容器转为镜像,再保存为镜像文件,迁移到其他机器后导入为镜像 1.commit:将容器转镜像 # docker commit {container_id} {镜像 ...
- 【FastDFS】环境搭建 02 测试
自带工具测试: 编辑客户端配置文件: vim client.conf 配置完成后,随便上传一个图片到root目录下 运行FastFDS文件上传程序,并将客户端配置文件作为加载参数1,要上传的图片文件位 ...
- 服务器上运行 xvbf 时报错 —— Unknown encoder 'libx264'
解决方法: 使用conda环境(不具体交代) conda install ffmpeg 成功运行:
- model.train方法的dataset_sink_mode参数设置为False时以step作为单位打印数据——(只在mode=context.GRAPH_MODE下成立,在mode=context.PYNATIVE_MODE模式下不成立)
如题: 官方中的内容支持: https://www.mindspore.cn/tutorial/training/zh-CN/r1.2/advanced_use/summary_record.html ...
- linux工具grep的使用心得笔记
grep作为linux管理中常用的三大工具之一(grep.awk.sed),其功能十分强大,因此难以对其进行全面的使用介绍,因此本文只作为个人学习的笔记之用. grep的用处: 在文本中匹配要查询的字 ...
- [COCI2015-2016#1] RELATIVNOST 题解
前言 题目链接:洛谷. 这道题有很多做法,但是模拟赛寄了,故记之. Update on 2024.7.23 修复了一处时间复杂度的笔误. 题意简述 给你两个长为 \(n\) 的序列 \(A\) 和 \ ...
- 【简单菊花图】Codeforce 1583Problem - B.md
1583Problem - B - Codeforces 题目大意:n个点的无根树 给出m个限制条件 (a,c,b)在a到b路径上不能存在c点,求任意一种可能的树的所有边 注意数据范围:1<m& ...
- MySQL 优化慢查询
查询以SELECT 语句的形式执行数据库中的所有查找操作.调整这些语句是重中之重,无论是实现动态网页的亚秒响应时间,还是缩短数小时生成大量夜间报告的时间. 此外SELECT语句,进行查询调谐技术也适用 ...