脚本字段上的ElasticSearch聚合

时间:2016-03-08 13:45:09

标签: elasticsearch groovy aggregation

我在弹性查询中添加了一个名为“age”的脚本文件,其定义如下:

  "script_fields" : {
    "age" : {
      "script" : "DateTime.now().year - doc['date_of_birth'].date.year"
    }
  }

现在,我还为每个人提供了其他领域,称为“myscore”。 我正试图在myscore上进行聚合,并创建一个年龄的子聚合。 我希望看到的结果是:

key: 25
buckets: [
     67,
     70,
     74
]
key: 62
buckets: [
    45
]

我添加了这个聚合:

{
    "myagg": {
        "terms": {
            "field": "myscore",
            "size": 1000,
            "order": {
                "_count": "desc"
            }
        },
        "aggregations": {
            "inner": {
                "terms": {
                    "field": "age",
                    "size": 1000
                }
            }
        }
    }
}

但是年龄的内部桶返回空(在命中本身我可以看到年龄段)...

任何想法?

1 个答案:

答案 0 :(得分:2)

您需要在聚合中使用脚本:

"aggs" : {
"myagg": {
    "terms": {
        "field": "myscore",
        "order": {
            "_count": "desc"
        }
    },
    "aggregations": {
        "group by age": {
            "terms": {
                "script": "DateTime.now().year - doc['dateCreated'].date.year"

            }
         }
      }
   }
 }

希望这会对你有帮助..