分三步:
1.导入依赖
2.编写配置,给容器注入一个RestHighLevelClient
3.使用
1.先创建一个模块,然后导入ES 的high level client
3.index: 可从ES 中保存和更新数据。
检索:也就是要构造出一下的格式
代码如下:
将检索条件打印出来,放到BeJson 中进行格式校验:
和Kibana 的检索条件格式是一样的。
我们要利用返回的数据,赋值到Java 类中,这里的操作就要看ES 的官方文档了
这个获取到的Hits 返回的是数据中最大的hits,真正的数据在hits 中
整体代码:
@Test
public void searchData() throws IOException {
//构造一个search 请求
SearchRequest searchRequest = new SearchRequest();
//指定检索的索引
searchRequest.indices("bank");
//1.指定DSL: 检索条件
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//1.1 构造检索条件
searchSourceBuilder.query(QueryBuilders.matchQuery("address","mill"));
System.out.println(searchSourceBuilder.toString());
//1.2 按照年龄的值分布进行聚合
TermsAggregationBuilder ageAgg = AggregationBuilders.terms("ageAgg").field("age").size(10);
searchSourceBuilder.aggregation(ageAgg);
//1.3 计算平均薪资
AvgAggregationBuilder field = AggregationBuilders.avg("balanceAvg").field("balance");
searchSourceBuilder.aggregation(field);
System.out.println("检索条件:"+searchSourceBuilder.toString());
searchRequest.source(searchSourceBuilder);
//执行检索
SearchResponse searchResponse = client.search(searchRequest, GulimallElasticSearchConfig.COMMON_OPTIONS);
//分析响应结果
System.out.println(searchResponse.toString());
SearchHits hits = searchResponse.getHits();
SearchHit[] hits1 = hits.getHits();
for (SearchHit hit: hits1) {
String sourceAsString = hit.getSourceAsString();
Account account = JSON.parseObject(sourceAsString, Account.class);
System.out.println("account"+account);
}
//获取本次检索到的分析信息
Aggregations aggregations = searchResponse.getAggregations();
Terms aggAgg = aggregations.get("ageAgg");
aggAgg.getBuckets().forEach(i -> {
String keyAsString = i.getKeyAsString();
System.out.println("年龄:"+keyAsString);
});
Avg balanceAgg = aggregations.get("balanceAvg");
double value = balanceAgg.getValue();
System.out.println("平均薪资:"+value);
}