java - Java TransportClient 的结果与 REST/CURL 的结果不同

标签 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 客户端,但除非有必要,否则宁愿不引入另一个库/语法。

感谢您的任何想法。

最佳答案

            .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");

关于java - Java TransportClient 的结果与 REST/CURL 的结果不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40252126/

相关文章:

java - Dropwizard/JAX-RS 1.x (JSR 311) 中的资源链接

java - _version、_id 等的 spring-data-elasticsearch 元数据注释

java - 如果我运行我的代码,我将获得多少内存?

django - 使用django haystack和elasticsearch逃脱搜索结果

php - Elasticsearch,忽略GET响应中的内置映射详细信息

python - 使用Python将数据帧索引到Elasticsearch中

authentication - 如何验证 Logstash 输出到安全的 Elasticsearch URL(版本 5.6.5)

java - 我应该为我的新 Spring Batch 作业使用 Spring Data flow 服务器吗?

java - 我什么时候应该使用 JSF 而不是 Javascript+HTML+CSS UI?

java - 使用 TableModelListener 从数据库检索数据到 JTable(JTable 中有 JCheckbox)时出错