2016-11-29 62 views
0

這裏是我的索引PublicationsLikes的映射:當您在Elasticsearch上聚合結果時,是否可以返回其他字段?

  • ID:字符串
  • 帳戶:字符串
  • API:字符串
  • 日期:日期

我目前正在做的ES上的聚合,我通過id(出版物)對結果計數進行分組。

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

返回的「key」(id)是一個信息,但我也需要選擇刊登的其他字段,如account和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

你可以使用subaggregation這個。

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很多球員。

相關問題