我已经用聚合编写了一个完整的查询,这样当我使用REST并使用CURL调用并执行POST时,它给了我我想要的内容:
POST http://127.0.0.1:9200/user_index/account_record/_search?search_type=count
{
"aggs":{
"updates_by_user":{
"terms":{
"script":"doc['accountNumber'].value"
}
}
}
}
我想使用相同的JSON并从Java API获得相同的结果。相反,Java API的行为就像我已经完成了HTTP GET操作一样。有没有办法通过Java API轻松重用相同的JSON?从Javadoc看起来就像必须用多种方法(例如.addAggregation)将其分解成碎片。我只是获得了高级别的计数而且没有关于桶的详细信息
为了记录,我的JSON要复杂得多,我只是为了解决这个问题而进行简化。
我的Java代码看起来像
SearchResponse searchResponse = client.prepareSearch("user_index")
.setTypes("account_record")
.setSearchType(SearchType.QUERY_THEN_FETCH)
.setSize(0)
.setQuery(query)
.execute().actionGet();
有什么想法吗?我想我总是可以使用HTTP客户端,但除非有必要,否则不要使用其他库/语法。
感谢任何想法。
答案 0 :(得分:1)
.prepareSearch("user_index")
.setTypes("account_record")
.setSearchType(SearchType.QUERY_THEN_FETCH)
.setSize(0)
.addAggregation(
AggregationBuilders.terms("updates_by_user")
.script(new Script("doc['accountNumber'].value"))
)
.execute().actionGet();
然后你需要这样的东西来访问聚合结果:
Terms terms = response.getAggregations().get("updates_by_user");