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 去重/聚合查询的更多相关文章

  1. ES系列九、ES优化聚合查询之深度优先和广度优先

    1.优化聚合查询示例 假设我们现在有一些关于电影的数据集,每条数据里面会有一个数组类型的字段存储表演该电影的所有演员的名字. { "actors" : [ "Fred J ...

  2. ElasticSearch 实现分词全文检索 - 聚合查询 cardinality

    目录 ElasticSearch 实现分词全文检索 - 概述 ElasticSearch 实现分词全文检索 - ES.Kibana.IK安装 ElasticSearch 实现分词全文检索 - Rest ...

  3. Es学习第九课, 聚合查询和复合查询

    ES除了实现前几课的基本查询,也可以实现类似关系型数据库的聚合查询,如平均值sum.最小值min.最大值max等等 我们就用上一课的数据作为参考来举例 聚合查询 sum聚合 sum是一个求累加值的聚合 ...

  4. ES[7.6.x]学习笔记(十)聚合查询

    聚合查询,它是在搜索的结果上,提供的一些聚合数据信息的方法.比如:求和.最大值.平均数等.聚合查询的类型有很多种,每一种类型都有它自己的目的和输出.在ES中,也有很多种聚合查询,下面我们看看聚合查询的 ...

  5. ElasticSearch(ES)使用Nested结构存储KV及聚合查询

    自建博客地址:https://www.bytelife.net,欢迎访问! 本文为博客同步发表文章,为了更好的阅读体验,建议您移步至我的博客 本文作者: Jeffrey 本文链接: https://w ...

  6. ElasticSearch的高级复杂查询:非聚合查询和聚合查询

    一.非聚合复杂查询(这儿展示了非聚合复杂查询的常用流程) 查询条件QueryBuilder的构建方法 1.1 精确查询(必须完全匹配上,相当于SQL语句中的“=”) ① 单个匹配 termQuery ...

  7. ElasticSearch 6.2 Mapping参数说明及text类型字段聚合查询配置

    背景: 由于本人使用的是6.0以上的版本es,在使用发现很多中文博客对于mapping参数的说明已过时.ES6.0以后有很多参数变化. 现我根据官网总结mapping最新的参数,希望能对大家有用处. ...

  8. python全栈开发day68-ORM操作:一般操作、ForeignKey操作、ManyToManyField、聚合查询和分组查询、F查询和Q查询等

    ORM操作 https://www.cnblogs.com/maple-shaw/articles/9403501.html 一.一般操作 1. 必知必会13条 <1> all(): 查询 ...

  9. java使用elasticsearch分组进行聚合查询(group by)-项目中实际应用

    java连接elasticsearch 进行聚合查询进行相应操作 一:对单个字段进行分组求和 1.表结构图片: 根据任务id分组,分别统计出每个任务id下有多少个文字标题 .SQL:select id ...

  10. Web框架之Django_05 模型层了解(单表查询、多表查询、聚合查询、分组查询)

    摘要: 单表查询 多表查询 聚合查询 分组查询 一.Django ORM 常用字段和参数: 常用字段:#AutoFieldint自增列,必须填入参数primary_key = True,当model中 ...

随机推荐

  1. ABC354

    A link 模拟整个过程即可. 点击查看代码 #include<bits/stdc++.h> #define int long long using namespace std; sig ...

  2. 关于使用c++制作蓝牙连接,Windows版本

    1 #define _CRT_SECURE_NO_WARNINGS 2 #pragma warning(disable : 4995) 3 #include <iostream> 4 #i ...

  3. 前缀函数及 Knuth–Morris–Pratt 算法学习笔记

    \(\text{1 引言 Preface}\) 对于形如以下的问题: 给予一个模式串 \(T\) 和主串 \(S\),在主串中寻找 \(T\). 我们称之为字符串匹配. 很显然朴素算法时间复杂度是 \ ...

  4. 什么是spring.factories,引入未知模块报错如何解决

    对于maven中引入其他外部包加入容器的过程,需要用到spring.factories spring.factories的作用:将自动配置类与对应的配置类集中在一起,方便springboot自动装配, ...

  5. 微服务:nacos服务注册与发现

    服务治理的三个角色: 服务提供者:订阅服务 服务消费者:注册服务 注册中心:记录与监控服务状态,推送服务变更信息.提供者定时发送心跳检测,心跳检测失败,就会向消费者推送变更 提供者通过负载均衡的算法选 ...

  6. python none类型

    一.python中的数据类型:数值类型.序列类型.散列类型. 1.数值类型:整数型(int).浮点数(float).布尔值(bool) 2.序列类型(有序的):序列类型数据的内部元素是有顺序的,可以通 ...

  7. postfix&dovecot搭建邮件服务器

    本篇参考 https://blog.51cto.com/5001660/2377785和小翔博客https://www.liuyixiang.com/post/113927.html. 邮件发送和接受 ...

  8. 【Shiro】07 散列算法 & 凭证配置

    [散列算法概述] 用于生成数据的摘要信息,不可逆算法,用于存储密码或者密文数据. 常见散列算法类型:MD5.SHA 一般进行散列时提供一个"盐",即系统知道的"干扰数据& ...

  9. 特朗普开始在YouTube上打竞选广告了 —— 美国总统的竞选广告已经开始媒体投放了

    相关: 拜登开始在YouTube上打竞选广告了 -- 美国总统的竞选广告已经开始媒体投放了 PS. 又多了一个猴上台,哈哈哈. 特朗普的竞选资金筹集网站:

  10. .gitignore文件的使用方法(学习总结版)—— .gitignore 文件的配合用法

    本文紧接前文: .gitignore文件的使用方法(学习总结版) ============================================= 本文主要讨论前文中所说的一个操作,即: . ...