Агрегированный диапазон дат отфильтрованных значений в упругом поиске
Мне нужно отфильтровать группу значений на основе даты (здесь добавлено поле), а затем сгруппировать ее по device_id
, Поэтому я использую следующую вещь:
{
"aggs":{
"dates_between":{
"filter": {
"range" : {
"added" : {
"gte": "2014-07-01 00:00:00",
"lte" :"2014-08-01 00:00:00"
}
}
},
"aggs": {
"group_by_device_id": {
"terms": {
"field": "device_id"
}
}
}
}
}
}
Это дает мне ошибку "Failed to parse source"
при выполнении запроса. Это правильный способ сделать это?
Если я выполняю только агрегацию дат, она показывает значения, которые не входят в указанный диапазон дат
1 ответ
Решение
Это наоборот dates_between
является вложенной совокупностью group_by_device_id
"aggs": {
"group_by_device_id": {
"terms": {
"field": "device_id"
},
"aggs": {
"dates_between": {
"filter": {
"range": {
"added": {
"gte": "2014-07-01 00:00:00",
"lte": "2014-08-01 00:00:00"
}
}
}
}
}
}
}
Вы также можете переместить фильтр в запрос:
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"range": {
"added": {
"gte": "2014-07-01 00:00:00",
"lte": "2014-08-01 00:00:00"
}
}
}
}
},
"aggs": {
"group_by_device_id": {
"terms": {
"field": "device_id"
}
}
}
}