使用 Java api 的 Elasticsearch 聚合
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/24964361/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Elasticsearch aggregation using Java api
提问by Umesh K
Hi I am trying to do query on elastic search by following the sql query and I want to implement same logic using Java API
嗨,我正在尝试按照 sql 查询对弹性搜索进行查询,我想使用 Java API 实现相同的逻辑
select dttime, avg(cpu) from table cpustats where server="X" and dttime="Y" group by dttime,cpu
Now I have the following Java code but it does not return expected output
现在我有以下 Java 代码,但它没有返回预期的输出
SearchResponse response = client.prepareSearch("cpuindex")
.setTypes("cputype")
.setQuery(QueryBuilders.matchAllQuery())
.addAggregation(AggregationBuilders.terms("cpu_agg")
.field("cpu").size(100))
.execute().actionGet();
Please guide I am new to Elastic search. Thanks in advance.
请指导我是弹性搜索的新手。提前致谢。
采纳答案by progrrammer
I think this will help.
我认为这会有所帮助。
SearchResponse response=
client.prepareSearch("your_index_name_here").setQuery(QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.andFilter(
FilterBuilders.termFilter("server","x"),
FilterBuilders.termFilter("dt_time","x")
))).addAggregation(
AggregationBuilders.terms("dt_timeaggs").field("dt_time").size(100).subAggregation(
AggregationBuilders.terms("cpu_aggs").field("cpu").size(100)
)
).setSize(0).get();
please verify.
请核实。
回答by Sean Zhu
since elastic search 2.3, FilterBuilders class has been removed from JavaAPI. you can use
自弹性搜索 2.3 起,FilterBuilders 类已从 JavaAPI 中删除。您可以使用
QueryBuilder qb = QueryBuilders.boolQuery()
.must(QueryBuilders.matchQuery("_all", "JPMORGAN"))
.must(QueryBuilders.matchQuery(field, value)) ;
instead, and set it to
相反,并将其设置为
.setQuery(qb).