如何在输出存储桶中添加名为“agency_name”的新密钥。
我正在运行聚合代码,如下所示
{
"aggs": {
"name": {
"terms": {
"field": "agency_code"
}
}
}
}
我将以
为出发点"aggregations": {
"name": {
"doc_count_error_upper_bound": 130,
"sum_other_doc_count": 39921,
"buckets": [
{
"key": "1000",
"doc_count": 105163
},
{
"key": "2100",
"doc_count": 43006
}
]
}
}
显示时我需要显示代理商名称,代码和doc_count
如何修改聚合查询以便我可以获得以下格式。我是ElasticSearch的新手,不知道如何解决这个问题
"aggregations": {
"name": {
"doc_count_error_upper_bound": 130,
"sum_other_doc_count": 39921,
"buckets": [
{
"key": "1000",
"doc_count": 105163,
"agency_name": 'Agent 1'
},
{
"key": "2100",
"doc_count": 43006,
"agency_name": 'Agent 2'
}
]
}
}
ElasticSearch中的示例数据(分析字段)
{
"_index": "feeds",
"_type": "news",
"_id": "22005",
"_version": 1,
"_score": 1,
"_source": {
"id": 22005,
"name": "Test News",
"agency_name": "Agent 1",
"agency_code": "1000",
}
}
答案 0 :(得分:7)
您可以使用热门点击汇总,如下面的链接所示。格式会略有不同,因为创建额外的聚合会将代理商名称嵌入另一个' hits'键。
Adding additional fields to ElasticSearch terms aggregation
{
"aggs": {
"name": {
"terms": {
"field": "agency_code"
},
"aggs": {
"agency_names" : {
"top_hits": {
size: 1,
_source: {
include: ['agency_name']
}
}
}
}
}
}
}
答案 1 :(得分:3)
这是旧帖子,然而,我遇到了同样的问题,我按照https://www.elastic.co/guide/en/elasticsearch/reference/current/agg-metadata.html给出的内容。添加元数据详细信息,它将作为上面结果的一部分返回。希望它将来有助于某人。
答案 2 :(得分:2)
我认为你需要添加另一个“aggs”。但它不是您想要的格式,而是输出中的另一个字段,原因是您目前正在基于“agency_code”聚合,而doc_count显示特定代理商代码出现的次数。现在,当您想要根据“agency_name”聚合它时,该字段可能在不同的文档中,而不是“agency_code”,并且在不同的数字中也是如此,如果它们总是存在于对,那么这个父子索引可能会有所帮助。
https://www.elastic.co/guide/en/elasticsearch/guide/current/indexing-parent-child.html
答案 3 :(得分:1)
ES无法一对一地了解agency_name
和agency_code
地图。因此,我会推荐一些可能的策略。
agency_name
并在该字段上使用术语agg。如果您确实需要对agency_name
进行标记化,我会感到惊讶。正如上面提到的Aditya Patel,父母子女关系也可能有所帮助,但我相信您仍然必须使用上述策略之一来解析id->名称映射。
答案 4 :(得分:0)
我要做的是使用类似以下查询的内容:
"aggs" : {
"products" : {
"filter" : { "term": { "item.category": "children" }},
"aggs" : {
"count" : {
"terms" : {
"script": "doc['item.id'].value + ':' + doc['item.name'].value"
}
}
}
}
}
哪个返回如下内容:
...
"aggregations" : {
"products" : {
"doc_count" : 1050,
"count" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "x2_90QBj9k:Baby Oil",
"doc_count" : 45
},
...
]
...
然后,我可以对循环中的每个i对bucket [i] [“ key”]使用字符串操作来提取相关字段。