2016-02-11 34 views
1

我试图在elasticsearch中执行一个查询来从特定日期范围获取特定用户的reuslt。结果应该由用户id进行分组和排序上trackTime场,我能够通过聚合使用组,但我不能够对tracktime聚集桶排序,我写下了下面的查询排序elasticsearch顶部命中结果

GET _search 
{ 
"size": 0, 
"query": { 
    "filtered": { 
     "query": { 
      "bool": { 
       "must": [ 
        { 
         "range": { 
          "trackTime": { 
           "from": "2016-02-08T05:51:02.000Z" 
          } 
         } 
        } 
       ] 
      } 
     }, 
     "filter": { 
      "terms": { 
       "userId": [ 
        9, 
        10, 
        3 
       ] 
      } 
     } 
    } 
}, 
"aggs": { 
    "by_district": { 
     "terms": { 
      "field": "userId" 
     }, 
     "aggs": { 
      "tops": { 
       "top_hits": { 
        "size": 2 
       } 
      } 
     } 
    } 
} 
} 

什么更多的应该我必须使用排序的顶级命中结果?在此先感谢...

回答

5

你可以使用sort like。

"aggs": { 
"by_district": { 
    "terms": { 
     "field": "userId" 
    }, 
    "aggs": { 
     "tops": { 
      "top_hits": { 
       "sort": [ 
        { 
         "fieldName": { 
          "order": "desc" 
         } 
        } 
       ], 
       "size": 2 
      } 
     } 
     } 
    } 
} 

希望它可以帮助

+0

感谢的人,这是工作的超精细。你让我的一天... –

+0

@Richa我在类似的情况。 Top_hits聚合下的排序字段名更像深度2级。例如:“sort”:{“user.name.fieldName”:{“order”:“desc”}} ..它在这种情况下不起作用。有什么想法吗..? – DecKno

+0

@Arivazhagan Jeganathan:它为我工作。是用户'嵌套'的类型? – Richa