2015-05-08 2 views
0

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

Если я попробую, как показано ниже, результат агрегации будет отсортирован по количеству документов.

"order": { 
    "revrsenestedowners": "desc" 
} 

Ниже приведено описание проблемы, стоящей перед лицом. (имена полей меняются только для иллюстрации проблемы)

«машины» - это мой вложенный объект, но «владельцы» не вложены и принадлежат к родительскому объекту.

Мне нужно получить 10 наименований машин по числу владельцев компьютеров (требуется сумма, поскольку объект-владелец является списком и может иметь более одного значения).

{ 
    "query": { 
    "range": { 
     "createdDate": { 
     "gte": "2015-04-28T00:00:00", 
     "lte": "2015-05-01T23:59:59" 
     } 
    } 
    }, 
    "aggs": { 
    "nestedagg": { 
     "nested": { 
     "path": "machines" 
     }, 
     "aggs": { 
     "terms": { 
      "terms": { 
      "field": "machines.machineName", 
      "size": 10, 
       "order": { 
        "sumowners": "desc" 
       } 
      }, 
      "aggs": { 
      "revrsenestedowners": { 
       "reverse_nested": {}, 
       "aggs": { 
       "sumowners": { 
        "sum": { 
        "field": "owners.machinesCount" 
        } 
       } 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

Мне требуется заказ на сумму, а не заказ количества документов. для того, чтобы работать, я, возможно, потребуется что-то вроде:

"order": { 
    "revrsenestedowners.sumowners": "desc" 
} 

Есть ли способ добиться того, что я ищу.

Или это ограничение с эластичным поиском? или ошибка?

я застрял и действительно признателен за любую помощь

ответ

0

я поднял тот же вопрос на упругом форуме Поиск и они ответили с правильным синтаксисом,

https://github.com/elastic/elasticsearch/issues/11059

Ответ есть:

"order": { 
    "revrsenestedowners > sumowners.value" : "desc" 
} 

Надеюсь, это может помочь другим,