Java TransportClient与REST / CURL的结果不同

时间:2016-10-26 01:07:53

标签: java elasticsearch

我已经用聚合编写了一个完整的查询,这样当我使用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客户端,但除非有必要,否则不要使用其他库/语法。

感谢任何想法。

1 个答案:

答案 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");