2016-02-11 4 views
1

Я пытаюсь выполнить запрос в elasticsearch, чтобы получить повтор определенных пользователей с определенного диапазона дат. результаты должны быть сгруппированы по USERID и сортируют на поле trackTime, я могу использовать группу с помощью агрегации, но я не в состоянии сортировать агрегирование ведра на tracktime, я записываю следующий запросСортировка elasticsearch top hits results

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 как.

"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

Смежные вопросы