首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从聚合中的alternate字段返回键值

从聚合中的alternate字段返回键值
EN

Stack Overflow用户
提问于 2014-06-06 07:38:11
回答 4查看 7.4K关注 0票数 12

是否可以让Elastic Search根据不同的文档字段返回聚合键?

我们将一个外部id和外部名称都放在我们的类型中,然后在id上聚合,但希望返回名称。名称不是唯一的,因此它们不适合聚合。我知道它们在记录集中也不一定是唯一的,但可以接受从记录集中的单个记录中采样的名称。

例如,假设我们的数据是关于产品的销售。每个销售都有与之相关联的产品id和产品名称。

代码语言:javascript
复制
// Sales
{ "product_id": 1, "product_name": "Beer", "quantity": 3, … }
{ "product_id": 1, "product_name": "Beer", "quantity": 2, … }
{ "product_id": 2, "product_name": "Wine", "quantity": 6, … }

查询:

代码语言:javascript
复制
"aggregations": {
    "product": {
      "terms": {
        "field": "product_id"
      },
      "aggregations": {
        "day": {
          "count": {
            "value_count": {
              "field": "quantity"
            }
          }
        }
      }
    }
  }
}

结果:

代码语言:javascript
复制
…
"aggregations": {
  "product": {
    "buckets": [
    {
      "key": "1",
      "doc_count": 2,
      "count": {
        "value": 5
      }
    },{
      "key": "2",
      "doc_count": 1,
      "count": {
        "value": 6
    }
    ]
  }
}
…

想要的结果:

代码语言:javascript
复制
…
"aggregations": {
  "product": {
    "buckets": [
    {
      "key": "Beer",
      "doc_count": 2,
      "count": {
        "value": 5
      }
    },{
      "key": "Wine",
      "doc_count": 1,
      "count": {
        "value": 6
    }
    ]
  }
}
…

在阅读了有关脚本的文档后,我认为这是不可能的,因为它只根据值进行计算,而且似乎没有访问整个文档的权限(因为没有文档,而是一组文档)。

EN

回答 4

Stack Overflow用户

发布于 2015-02-10 23:55:36

如果只使用脚本属性(这样就可以访问整个文档),则可以使用脚本完成此操作。然后在你的客户端中拆分它:例如:

代码语言:javascript
复制
"aggs": {
    "types_of": {
      "terms": {
        "script": "doc['product_name'].value + '|' + doc['product_id'].value"
      }
    }
  }
票数 4
EN

Stack Overflow用户

发布于 2014-06-06 20:54:54

如果您拥有索引过程的所有权力,我建议您根据product_id添加一个新字段(不分析),并在该字段上进行聚合。

我不认为(但我可能错了)你想做的事情是可能的。

票数 0
EN

Stack Overflow用户

发布于 2014-11-03 23:05:33

您可以使用子聚合来获取名称,因此您的查询将如下所示:

代码语言:javascript
复制
"aggregations": {
    "product": {
      "terms": {
        "field": "product_id"
      },
      "aggregations": {
        "name": {
          "terms": {
            "field": "product_name"
          }
        },
        "day": {
          "count": {
            "value_count": {
              "field": "quantity"
            }
          }
        }
      }
    }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24071939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档