2017-09-05 34 views
1

我是编程新手,我想从弹性搜索中存储的数据中获得一个月内使用的功耗总和,我已经使用了感觉并获得了值,但仍然找到它很难在scala中使用Java API。这是我做过什么如何使用Java API在scala上创建弹性搜索聚合

POST /myIndext/myType/_search?search_type=dfs_query_then_fetch 
{ 
"aggs": { 
"duration": { 
"date_histogram": { 
"field": "Day", 
"interval": "month", 
"format": "yyyy-MM-dd"}, 
"aggs": { 
"Power_total": { 
"sum": { 
"field": "myField" 
} 
} 
} 
} 
} 
} 

结果

("aggregations": { 
     "duration": { 
     "buckets": [ 
      { 
       "key_as_string": "2017-01-01", 
       "key": 1480550400000, 
       "doc_count": 619, 
       "myField": { 
        "value": 5218.066633789334 
       } 
      } 

然后Scala代码是这样的

val matchquery = QueryBuilders.matchQuery("ID", configurate) 

    val queryK = QueryBuilders.matchQuery("ID", configurate) 

    val filterA = QueryBuilders.rangeQuery("Day").gte("2017-01-02T00:00:05.383+0100").lte("2017-01-13T00:00:05.383+0100") 
    val query = QueryBuilders.filteredQuery(queryK, filteAr) 
    val agg = AggregationBuilders.dateHistogram("duration") 
     .field("Day") 
     .interval(DateHistogramInterval.MONTH) 
     .minDocCount(0) 
     .extendedBounds(new DateTime("2017-01-01T00:00:05.383+0100"), new DateTime("2017-01-13T00:00:05.383+0100")) 
      .subAggregation(AggregationBuilders.sum("power_total").field("myField")) 

    val result: SearchResponse = client 
     .prepareSearch("myIndex") 
     .setTypes("myType") 
     .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) 
     .setQuery(query) 
     .addAggregation(agg) 
     .addSort("Day", SortOrder.DESC) 
     .setSize(815) 
     .addField("myField") 
     .execute() 
     .actionGet() 

    val results = result.getHits.getHits 
     println("Current results: " + results.length) 
     for (hit <- results) { 
      println("------------------------------") 
      val response = hit.getSource 
      println(response) 
     } 
    client.close() 

结果

current result = 0 

请让我知道为什么我没有得到“myField”的值就像我使用se一样NSE。
我已经尝试了多次,仍然得到相同的错误,难道是我不解析查询响应正确的方式吗?

+0

您是否试图完全复制感觉查询?如果是这样,对于初学者来说,'myIndext'用在那里,但是Scala代码中的'myIndex' –

+0

没有检查我的答案,我把“myIndex”用于目的而不是我使用的名称。 –

回答

0

一切都是正确的唯一的错误是,我查询的日期时间没有存储在我的数据库中存储。所以而不是“2017-01-01”,我插入这个“2017-01-02”