2016-02-11 80 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