使用无痛脚本编写嵌套文档上的聚合

时间:2019-03-26 08:20:35

标签: elasticsearch elasticsearch-painless

使用弹性搜索6.2 因此,我具有一个深层嵌套的文档结构,该结构具有所有适当的映射(嵌套,文本,关键字等)。示例文件如下:

array(2) {
  ["Red"]=>
  array(2) {
    [0]=>
    string(5) "Apple"
    [1]=>
    string(3) "Sun"
  }
  ["Green"]=>
  array(1) {
    [0]=>
    string(5) "Grass"
  }
}

我想做的是找出所有行从“创建”到“结束”所需的平均时间。

我创建了以下查询

{
    "type": "Certain Type",
    "lineItems": [
        {
            "lineValue": 10,
            "events": [
                {
                    "name": "CREATED",
                    "timeStamp": "TIME VALUE"
                },
                {
                    "name": "ENDED",
                    "timeStamp": "TIME VALUE"
                }
            ]
        }
    ]
}

结果是聚合结果为0,这是错误的。

有什么办法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

在嵌套对象脚本中使用doc [无效,因为嵌套是用于弹性搜索的新文档。

请改用params._source(https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-script-fields.html)。请注意,如果您有很多文档或需要大量查询,请访问源文件确实很慢,请考虑在主文档上添加此字段。

我认为所有值都存在,如果需要的话,如果要进行健壮性测试,则应该添加。

long toTime = 0; 
long fromTime = 0; 
timeDiff  = params['_source']['ENDED'] 
fromTime  = params['_source']['CREATED']
return (toTime - fromTime);