【问题标题】:ElasticSearch aggregation on a script field脚本字段上的 ElasticSearch 聚合
【发布时间】:2016-03-09 00:02:32
【问题描述】:

我在弹性查询中添加了一个名为“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
                }
            }
        }
    }
}

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

有什么想法吗?

【问题讨论】:

    标签: elasticsearch groovy aggregation


    【解决方案1】:

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

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

    希望对你有所帮助..

    【讨论】:

    • 那是我做的第一件事,但因为我已经从查询中检索了“年龄”字段(所以我使用了 script_field),我认为聚合起来是有意义的无需重新编写脚本...
    • 我不确定您是否可以在聚合或查询中使用脚本化字段
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2016-05-20
    • 2020-02-18
    相关资源
    最近更新 更多