2016-11-29 11 views
0

Вот отображение моего индексного PublicationsLikes:Можно ли возвращать другие поля при объединении результатов на Elasticsearch?

  • ID: String
  • счет: String
  • апи: String
  • Дата: Дата

Я в настоящее время делаю агрегация на ES, где я группирую результаты по id (публикации).

{ 
    "key": "<publicationId-1>", 
    "doc_count": 25 
}, 
{ 
    "key": "<publicationId-2>", 
    "doc_count": 387 
}, 
{ 
    "key": "<publicationId-3>", 
    "doc_count": 7831 
} 

Возвращенные «ключ» (идентификатор) является информацией, но мне также нужно выбрать другое поле публикации, как счета и API. Немного так:

{ 
    "key": "<publicationId-1>", 
    "api": "Facebook", 
    "accountId": "65465z4fe6ezf456ezdf", 
    "doc_count": 25 
}, 
{ 
    "key": "<publicationId-2>", 
    "api": "Twitter", 
    "accountId": "afaez5f4eaz", 
    "doc_count": 387 
} 

Как я могу управлять этим?

Спасибо.

ответ

1

Это требование лучше всего достигается за счет top_hits агрегирование, где вы можете отсортировать документы в каждом ковше и выбрать первый, а также вы можете управлять полями, которые вы хотите вернуть:

{ 
    "size": 0, 
    "aggs": { 
    "publications": { 
     "terms": { 
     "field": "id" 
     }, 
     "aggs": { 
     "sample": { 
      "top_hits": { 
      "size": 1, 
      "_source": ["api","accountId"] 
      } 
     } 
     } 
    } 
    } 
} 
0

Для этого вы можете использовать субагрегацию.

GET /PublicationsLikes/_search 
{ 
"aggs" : { 
    "ids": { 
    "terms": { 
    "field": "id" 
    }, 
    "aggs": { 
    "accounts": { 
    "terms": { 
     "field": "account", 
     "size": 1 
    } 
    } 
    } 
    } 
} 
} 

Ваш результат будет не совсем то, что вы хотите, но это будет немного похожий:

{ 
    "key": "<publicationId-1>", 
    "doc_count": 25, 
    "accounts": { 
     "buckets": [ 
     { 
      "key": "<account-1>", 
      "doc_count": 25 
     } 
     ] 
    } 
}, 
{ 
    "key": "<publicationId-2>", 
    "doc_count": 387, 
    "accounts": { 
     "buckets": [ 
     { 
      "key": "<account-2>", 
      "doc_count": 387 
     } 
     ] 
    } 
}, 
{ 
    "key": "<publicationId-3>", 
    "doc_count": 7831, 
    "accounts": { 
     "buckets": [ 
     { 
      "key": "<account-3>", 
      "doc_count": 7831 
     } 
     ] 
    } 
} 

Вы также можете проверить the link, чтобы найти более подробную информацию

0

Спасибо за ваши быстрые ответы. Я думаю, что первое решение является самым «красивым» (с точки зрения запроса, но также и для получения результатов), но оба они, как представляется, являются запросами на сводные агрегирования.

{ "size": 0, "aggs": { "publications": { "terms": { "size": 0, "field": "publicationId" }, "aggs": { "sample": { "top_hits": { "size": 1, "_source": ["accountId", "api"] } } } } } }

Я думаю, что я должен быть осторожным, чтобы размер = 0 параметра, так, потому что я работаю в Java Api, я решил поставить INT.Max вместо 0.

Thnaks много парней ,

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

  • Нет связанных вопросов^_^