2016-03-03 2 views
0

У меня есть следующие документы, хранящиеся в elasticsearch:Elasticsearch Уплотненного Фильтр Макс

{ 
    run_number: 3, 
    vendor: v_a, 
    data: blah 
}, 
{ 
    run_number: 2, 
    vendor: v_b, 
    data: blah 
}, 
{ 
    run_number: 2, 
    vendor: v_b, 
    data: blah2 
}, 
{ 
    run_number: 1, 
    vendor: v_a, 
    data: blah 
}, 
{ 
    run_number: 1, 
    vendor: v_b, 
    data: blah 
} 

Я пытаюсь запустить поисковый запрос против этого, который возвращает документы для последнего прогона для каждого поставщика. В этом примере я хочу вернуть первые 3 документа (так как у них есть max «run_number» для данного поставщика).

Мой текущий запрос:

{ 
"size": 500, 
"aggs": { 
    "group_by_vendor": { 
     "terms": { 
      "field": "vendor" 
     }, 
     "aggs": { 
      "max_run_number": { 
       "terms": { 
        "field": "run_number", 
        "order": {"_term": "desc"}, 
        "size": 1 
       } 
      } 
     } 
    } 
} 
} 

Но агрегация max_run_number с размером = 1 только ограничивает вложенные ведра, которые возвращаются. Это все равно возвращает все хиты.

ответ

1

Использование top_hits здесь

{ 
"size": 0, 
"aggs": { 
"group_by_vendor": { 
    "terms": { 
     "field": "vendor" 
    }, 
    "aggs": { 
     "max_run_number": { 
      "terms": { 
       "field": "run_number", 
       "order": {"_term": "desc"}, 
       "size": 1 
      }, 
      "aggs" : { 
       "top hits agg" : { 
       "top_hits" : { 
       "size" :3 
       } 
       } 
      } 
     } 
     } 
    } 
    } 
    } 
Смежные вопросы