文章目录
最大值查询
- 最大值查询
- 分组查询
import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.Aggregations;
import org.elasticsearch.search.aggregations.metrics.ParsedMax;
import org.elasticsearch.search.builder.SearchSourceBuilder;
/**
* @author:
* 创建时间:2022/1/11 21:05
*/
public class ESTest_Doc_Query {
public static void main(String[] args) throws Exception {
RestHighLevelClient esClient = null;
// 创建ES客户端
try {
esClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("127.0.0.1", 9200, "http"))
);
SearchRequest request = new SearchRequest();
request.indices("user");
// 聚合查询 查最大值
SearchSourceBuilder builder = new SearchSourceBuilder();
AggregationBuilder aggregationBuilder = AggregationBuilders.max("maxAge").field("age");
builder.aggregation(aggregationBuilder);
request.source(builder);
SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
// 查询命中的信息
SearchHits hits = response.getHits();
System.out.println(hits.getTotalHits());
System.out.println(response.getTook());
Aggregations aggregations = response.getAggregations();
for (Aggregation aggregation : aggregations) {
System.out.println("aggregationName: " + aggregation.getName() + " value: " + ((ParsedMax) aggregation).value());
}
} finally {
if (esClient != null) {
// 关闭ES客户端
esClient.close();
}
}
}
}
结果如下 :
aggregationName maxAge value: 60.0
主要代码为:
AggregationBuilder aggregationBuilder = AggregationBuilders.max("maxAge").field("age");
maxAge
为自定义的聚合函数的名称. field("age")
为 要聚合操作的字段. 使用response的response.getAggregations()
获取聚合操作的结果
对年龄进行分组操作
import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.Aggregations;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
/**
* @author:
* 创建时间:2022/1/11 21:05
*/
public class ESTest_Doc_Query {
public static void main(String[] args) throws Exception {
RestHighLevelClient esClient = null;
// 创建ES客户端
try {
esClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("127.0.0.1", 9200, "http"))
);
SearchRequest request = new SearchRequest();
request.indices("user");
// 分组查询
SearchSourceBuilder builder = new SearchSourceBuilder();
TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("ageGroup").field("age");
builder.aggregation(aggregationBuilder);
request.source(builder);
SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
// 查询命中的信息
SearchHits hits = response.getHits();
System.out.println(hits.getTotalHits());
System.out.println(response.getTook());
Aggregations aggregations = response.getAggregations();
for (Aggregation aggregation : aggregations) {
System.out.println("aggregationName: " + aggregation.getName() + " value: " + aggregation.getType());
}
} finally {
if (esClient != null) {
// 关闭ES客户端
esClient.close();
}
}
}
}
运行结果如下图, 可以看到结果是放在aggregation的buckets中的. 分组年龄为key . 统计了数量.
主要的代码为
TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("ageGroup").field("age");
terms("ageGroup")
为分组的名称. field("age")
为分组的字段.