2016-09-26 6 views
1

Я сделал результат запроса, который агрегирует некоторые данные, а его ключ агрегации - число. Я попытался отсортировать результат агрегации по ключу. elasticsearch обработанный ключ как строка.Elasticsearch - Получить сортировку ключа агрегации как номер

Поскольку количество текущего ведра будет довольно большим, оно не может быть изменено на стороне клиента. Любая идея об этом?

Вот мой вопрос.

"aggregations" : { 
       "startcount" : { 
        "terms" : { 
         "script" : "round(doc['startat'].value/1000)", 
         "size" : 1000, 
         "order" : { "_term" : "asc" } 
        } 
       } 
      } 

и текущий ковш.

"buckets": [ 
     { 
      "key": "0", 
      "doc_count": 68 
     }, 
     { 
      "key": "1", 
      "doc_count": 21 
     }, 
     { 
      "key": "10", 
      "doc_count": 6 
     }, 
     { 
      "key": "11", 
      "doc_count": 16 
     }, 

Это мой ожидаемый результат.

"buckets": [ 
    { 
     "key": "0", 
     "doc_count": 68 
    }, 
    { 
     "key": "1", 
     "doc_count": 21 
    }, 
    { 
     "key": "2", // not '10' 
     "doc_count": 6 
    }, 
    { 
     "key": "3", // not '11' 
     "doc_count": 16 
    }, 
+0

В вашем отображении, какой типа делает 'startat' поля есть? – Val

+0

Тип - это «дата», а формат «strict_date_optional_time || epoch_millis». –

+0

Мне лучше использовать date_histogram. Спасибо, чтобы дать мне другую точку зрения. –

ответ

3

Использование value_script подхода должны исправить алфавитную проблему сортировки:

Пример:

{ 
    "size": 0, 
    "aggregations": { 
     "startcount": { 
     "terms": { 
      "field": "startat", 
      "script": "round(_value/1000)", 
      "size": 1000, 
      "order": { 
       "_term": "asc" 
      } 
     } 
     } 
    } 
} 
+0

работает для меня. спасибо :) –

+0

рад, что это помогло! – keety