热爱编程,热爱生活 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());
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!