【发布时间】:2015-12-25 13:57:02
【问题描述】:
我能够在基于 HTTP 的 JEST 客户端中通过 JSON 查询实现 aggregation 功能,但不能在基于 TCP 的 Java 客户端中实现。
通过JEST 客户端(基于HTTP REST)可以通过查询字符串实现聚合。
JEST 示例代码:
JestClientFactory factory = new JestClientFactory();
HttpClientConfig httpClientConfig = new HttpClientConfig
.Builder("http://localhost:9201")
.build();
factory.setHttpClientConfig(httpClientConfig);
JestClient client = factory.getObject();
String queryString ="{\"query\":{\"match_all\": {}},\"aggs\":{\"avg1\":{\"avg\":{\"field\":\"age\"} } }}";
Search.Builder searchBuilder = new Search.Builder(queryString)
.addIndex("st1index")
.addType("st1type");
SearchResult response = client.execute(searchBuilder.build());
System.out.println(response.getJsonString());
client.shutdownClient();
JEST 客户端的打印响应显示聚合结果。
在elasticsearch 中使用TCP client,可以通过AggregationBuilder 使用aggregation。
当我尝试在TCP 中实现 JSON 查询时,它没有返回聚合结果。
TCP 不支持通过查询字符串进行聚合但支持添加聚合选项有什么原因吗?
TCP Java 客户端示例代码:
已编辑
删除了 queryString 周围的 WrapperQueryBuilder。
Settings settings = ImmutableSettings.settingsBuilder()
.put("cluster.name", "javaEscluster")
.put("node.name", "arivu").build();
Client client = new TransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress("localhost", 9303));
String queryString ="{\"match_all\": {},\"aggs\":{\"avg1\":{\"avg\":{\"field\":\"age\"} } }}";
SearchResponse response = client.prepareSearch("st1index").setTypes("st1type").setQuery(queryString).execute().actionGet();
System.out.println("Getresponse-->" +"Index-->"+ response.toString());
//closing node
client.close();
System.out.println("completed");
此代码仅检索搜索结果和空聚合结果数据。
已编辑:
任何解释原因的参考资料都会很棒。
【问题讨论】:
标签: elasticsearch tcp