如何在ElasticSearch Aggregations中有效地获取单个值?

时间:2016-09-06 22:15:55

标签: elasticsearch

考虑一个示例聚合,我正在通过使用脚本度量标准为每个存储桶获取单个值:

...
"aggs": {
  "students": {
    "terms": { 
      "field": "studentId"
    },
    "aggs": {
      "student_name": {
        "scripted_metric": {
          "map_script" : "_agg['value'] = doc['studentName'].value",
          "combine_script" : "return _agg['value']",
          "reduce_script" : "return _aggs[0]"
        }
      },
      ...

通过这样做,我得到这样的结果:

...
"students": {
  ...
  "buckets": [
    {
      "key": "Student302",
      "doc_count": 39,
      "student_name": {
        "value": "Mr. Student"
      },
      ...

在这种情况下,我知道studentNamestudentId所有归档的所有文档都是相同的。所以我知道只需要一个结果。

理想情况下,我希望结果符合示例中显示的格式。我知道tophits聚合器,当我将命中设置为1时,它会做我想要的,但它需要额外的后处理才能使输出格式相同。

我正在寻找一种更有效或更理想的方式来获取相同格式的结果,其中“field_name”中只有一个“值”。

或者:有没有理由不像上面那样使用scripted_metric?

请注意,我需要针对多个字段执行此操作,并且我对使用脚本化指标的担忧与性能和维护有关。

请告知是否有更好的方法。

谢谢!

0 个答案:

没有答案