gpt4 book ai didi

java - 如何使用 spring-data-elasticsearch 中的聚合获取elasticsearch json响应?

转载 作者:行者123 更新时间:2023-11-30 03:07:07 28 4
gpt4 key购买 nike

我有以下内容:我注意到在运行代码结束时,如果我打印出aggregations.asMap().get('subjects');我正进入(状态:org.elasticsearch.search.aggregations.bucket.terms.StringTerms@6cff59fa

打印出“聚合”给我:org.elasticsearch.search.aggregations.InternalAggregations@65cf321d

我真正想要的是如果你要在elasticsearch上curl来获取聚合,通常会返回整个字符串/json响应。如何从聚合查询获取原始响应?另外,有没有办法迭代并打印出那些“包装”对象中的内容?

https://github.com/spring-projects/spring-data-elasticsearch/blob/ab7e870d5f82f6c0de236048bd7001e8e7d2a680/src/test/java/org/springframework/data/elasticsearch/core/aggregation/ElasticsearchTemplateAggregationTests.java

@Test
public void shouldReturnAggregatedResponseForGivenSearchQuery() {
// given
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(matchAllQuery())
.withSearchType(COUNT)
.withIndices("articles").withTypes("article")
.addAggregation(terms("subjects").field("subject"))
.build();
// when
Aggregations aggregations = elasticsearchTemplate.query(searchQuery, new ResultsExtractor<Aggregations>() {
@Override
public Aggregations extract(SearchResponse response) {
return response.getAggregations();
}
});
// then
System.out.println(aggregations); // gives me some cryptic InternalAggregations object, how do I get to the raw JSON normally returned by elasticsearch?
System.out.println(aggregations.asMap().get("subjects")); // gives me some StringTerms object I have no idea how to iterate over to get results
}

最佳答案

您无法通过这种方式获得原始 JSON 响应,因为 Spring Data Elasticsearch 会为您解析它,这就是重点。

如果您需要解析这些存储桶,您可以轻松地这样做:

...
StringTerms subjects = aggregations.asMap().get("subjects");
for (Terms.Bucket bucket : subjects.getBuckets()) {
String key = bucket.getKey();
long docCount = bucket.getDocCount();
// do something with the key and the doc count
}

如果你确实想看到返回的 JSON,你可以做的就是使用序列化将解析后的 Aggregations 对象重新写入 JSON,但这并没有真正的帮助:

InternalAggregations aggregations = ...;
XContentBuilder jsonBuilder = JsonXContent.contentBuilder();
aggregations.toXContent(jsonBuilder, ToXContent.EMPTY_PARAMS);
String rawJson = jsonBuilder.string();

关于java - 如何使用 spring-data-elasticsearch 中的聚合获取elasticsearch json响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34483034/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com