热爱编程,热爱生活 2020-01-13 10:41 采纳率: 0%
浏览 1413

根据sql,es的查询条件,怎么用java es api写出来。

Sql:

select hour,count(*),avg(billDuration) 
from tab
where customerNumber ='13201646126'
group by hour

es:

GET cdr_20200110/_search
{
  "size": 3, 
  "query": {
    "term": {
      "customerNumber": "13201646126"
    }
  },
  "aggs": {
    "hour_sum": {
      "terms":{
        "field": "hour"
      },
      "aggs": {
        "avg_bill": {
          "avg": {
            "field": "billDuration"
          }
        }
      }
    }
  }
}

自己写了个不知道对不对

TermQueryBuilder termQueryBuilder =  QueryBuilders.termQuery("customerNumber","13201646126");
        AggregationBuilder aggsBuilder = AggregationBuilders.filter("hour_sum",termQueryBuilder);
        TermsAggregationBuilder terms = AggregationBuilders.terms("hour");
        AvgAggregationBuilder avgs =AggregationBuilders.avg("avg_bill").field("billDuration");
        terms.subAggregation(avgs);
        terms.subAggregation(aggsBuilder);
  • 写回答

1条回答 默认 最新

  • Hefei19881002 2020-01-13 14:31
    关注
    这个方式比较难搞啊,看看我的 如果有用的话别忘记采纳
        public void search() throws IOException {
        RestClient client = RestClient.builder(new HttpHost("127.0.0.1", 9200, "http")).build();
        String dsl = "{" + 
                "  \"size\": 3, " + 
                "  \"query\": {" + 
                "    \"term\": {" + 
                "      \"customerNumber\": \"13201646126\"" + 
                "    }" + 
                "  }," + 
                "  \"aggs\": {" + 
                "    \"hour_sum\": {" + 
                "      \"terms\":{" + 
                "        \"field\": \"hour\"" + 
                "      }," + 
                "      \"aggs\": {" + 
                "        \"avg_bill\": {" + 
                "          \"avg\": {" + 
                "            \"field\": \"billDuration\"" + 
                "          }" + 
                "        }" + 
                "      }" + 
                "    }" + 
                "  }" + 
                "}";
        HttpEntity entity = new NStringEntity(dsl,ContentType.APPLICATION_JSON);
        Response performRequest = client.performRequest("GET","cdr_20200110/_search",Collections.singletonMap("pretty", "true"), entity);
        JSONObject jsonobj = (JSONObject) JSONObject.parse(EntityUtils.toString( performRequest.getEntity()));
        System.out.println(jsonobj.toString());
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误