以下是我的索引PublicationsLikes的映射:
我目前正在ES上进行聚合,我按照发布的ID对结果进行分组。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="panel">
<input type="text" id="filename" value="Name">
</div>
<div class="panel">
<input type="text" id="newfilename" value="">
</div>
<div class="panel">
<button type="button" id="btnGenerate">
Get File Name
</button>
</div>
返回的&#34;键&#34; (id)是一个信息,但我还需要选择出版物的另一个字段,如account和api。有点像:
{
"key": "<publicationId-1>",
"doc_count": 25
},
{
"key": "<publicationId-2>",
"doc_count": 387
},
{
"key": "<publicationId-3>",
"doc_count": 7831
}
我该如何管理?
感谢。
答案 0 :(得分:1)
此要求最好通过top_hits
聚合实现,您可以在其中对每个存储桶中的文档进行排序并选择第一个文档,并且您还可以控制要返回的字段:
{
"size": 0,
"aggs": {
"publications": {
"terms": {
"field": "id"
},
"aggs": {
"sample": {
"top_hits": {
"size": 1,
"_source": ["api","accountId"]
}
}
}
}
}
}
答案 1 :(得分: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以查找更多信息
答案 2 :(得分:0)
感谢您的快速回复。我认为第一个解决方案是最好的&#34;美丽&#34; (在请求方面,但也检索结果)但似乎都是子聚合查询。
{
"size": 0,
"aggs": {
"publications": {
"terms": {
"size": 0,
"field": "publicationId"
},
"aggs": {
"sample": {
"top_hits": {
"size": 1,
"_source": ["accountId", "api"]
}
}
}
}
}
}
我认为我必须小心size = 0参数,所以,因为我在Java Api中工作,所以我决定把INT.Max而不是0。
吸引了很多人。