使用 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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-14 16:01:37  来源:igfitidea点击:

Elasticsearch aggregation using Java api

javaelasticsearch

提问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).