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

根据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 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3