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中 ...
随机推荐
- 新版宝塔面板快速搭建WordPress新手教程
一.宝塔面板介绍 1. 介绍 宝塔面板是一款服务器管理软件,支持Windows和Linux系统,可以通过Web端轻松管理服务器,提升运维效率,该软件内置了创建管理网站.FTP.数据库.可视化文件管理器 ...
- 【SpringMVC】06 转发 & 重定向
除了快速入门的视图解析器方式处理, 我们还可以使用原生的Servlet转发方式执行 访问测试 还有重定向 访问 测试 使用SpringMVC的转发&重定向 和原生的重定向,有一点不同,MVC的 ...
- tmux开启鼠标模式
在tmux的配置文件中进行配置: vim ~/.tmux.conf set -g mouse on
- 《Python数据可视化之matplotlib实践》 源码 第四篇 扩展 第十三章
图 13.10 import matplotlib.pyplot as plt import matplotlib as mpl import numpy as np mpl.rcParams[&q ...
- ImageNet数据集下载
ImageNet数据集是Vision领域最重要的数据集之一,十分经典也十分常用,但是该数据集体量较大,而且由于在外网下载速度较慢,其中最为重要的一点是该数据集只提供给高校科研工作者,这也就意味着你必须 ...
- 【转载】 Do's and Don'ts of using t-SNE to Understand Vision Models —— t-SNE 作者写的使用指南(PPT版本)
<Do's and Don'ts of using t-SNE to Understand Vision Models> 作者的PPT视频:https://www.youtube.com/ ...
- 【全】CSS动画大全之其他【移动盒子显示详情】
效果预览 代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ...
- Camera | 9.如何让camera支持闪光灯?-基于rk3568
一.闪光灯基本原理 工作模式 Camera flash led分flash和torch两种模式. flash: 拍照时上光灯瞬间亮一下,电流比较大,目前是1000mA,最大电流不能超过led最大承受能 ...
- JavaScript设计模式样例十七 —— 迭代器模式
迭代器模式(Itrator Pattern) 定义:用于顺序访问集合对象的元素,不需要知道集合对象的底层表示.目的:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示.场景:$ ...
- Ubuntu上snmp安装、配置、启动及远程测试完整过程
说明 关于一个完整的教程,还是那句话,国内的要么不完整,要么就太旧了,而且思路也不清晰,所以这里写一篇完整的给大家分享一下. 虽然对于Linux主机的监控可以通过执行特定的命令来完成,但是相比之后,通 ...