我正在创建Terms Aggregation,但我想返回多个字段。我希望用户通过“ slug”(我的名字)选择存储桶,但显示实际的“ name”(我的名字)。
此刻,我正在像这样进行TopHits子聚合:
"organisation": {
"aggregations": {
"label": {
"top_hits": {
"_source": {
"includes": [
"organisations.name"
]
},
"size": 1
}
}
},
"terms": {
"field": "organisations.slug",
"min_doc_count": 0,
"size": 20
}
}
当我的整个查询实际找到一些存储桶/结果时,这将提供所需的结果。
您看到我将min_doc_count
设置为0
,这将返回文档计数为0的存储桶。我在这里面临的问题是我的TopHits响应为空,导致无法将正确的名称呈现给客户端。
示例响应:
"organisation": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "my-name",
"doc_count": 27,
"label": {
"hits": {
"total": 27,
"max_score": 1,
"hits": [
{
"_index": "users",
"_type": "doc",
"_id": "4475",
"_score": 1,
"_source": {
"organisations": [
{
"name": "My name"
}]
}
}]
}
}
},
{
"key": "my-name-2",
"doc_count": 0,
"label": {
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}
},
.....
有人完成了预期的结果吗?我觉得TopHits不会在这里帮助我。它应该始终获取名称。
我也尝试过的:
我认为可能是一种解决方案,但感觉很脏:
organisations.slug
___ organisations.name
”为新字段建立索引,并以此来处理魔术。亲切的问候, 预先感谢