Elasticsearch groovy脚本无法按预期工作

时间:2018-03-27 20:34:24

标签: elasticsearch groovy elasticsearch-2.0 elasticsearch-query

我对索引listing elasticsearch 2.5的部分映射(我知道我必须升级到更新版本并开始使用无痛,让我们暂时搁置这个问题)

"name":                             { "type": "string"                          },
"los": {                      
  "type": "nested",                     
  "dynamic": "strict",                      
  "properties": {                     
    "start":                        { "type": "date",   "format": "yyyy-MM"     },
    "max":                          { "type": "integer"                         },
    "min":                          { "type": "integer"                         }
  }                     
}

我的存储空间中只有one个文档,如下所示:

{
  "name": 'foobar',
  "los": [{
          "max": 12,
          "start": "2018-02",
          "min": 1
      },
      {
          "max": 8,
          "start": "2018-03",
          "min": 3
      },
      {
          "max": 10,
          "start": "2018-04",
          "min": 2
      },
      {
          "max": 12,
          "start": "2018-05",
          "min": 1
      }
  ]
}

我的弹性搜索查询中有一个groovy脚本,如下所示:

los_map = [doc['los.start'], doc['los.max'], doc['los.min']].transpose()
return los_map.size()

这个常规查询总是返回0,这是不可能的,因为我有一个文档,如上所述(即使我添加多个文档,它仍然返回0)并且los字段保证存在于每个doc都有多个对象。所以看来我正在做的转置不能正常工作?

我也尝试将此行los_map = [doc['los.start'], doc['los.max'], doc['los.min']].transpose()更改为los_map = [doc['los'].start, doc['los'].max, doc['los'].min].transpose(),然后我收到此错误"No field found for [los] in mapping with types [listing]"

有没有人知道如何让转置工作?

顺便说一下,如果你很好奇,我的完整脚本如下:

losMinMap = [:]
losMaxMap = [:]
los_map = [doc['los.start'], doc['los.max'], doc['los.min']].transpose()
los_map.each {st, mx, mn ->
  losMinMap[st] = mn
  losMaxMap[st] = mx
}
return los_map['2018-05']

提前谢谢。

0 个答案:

没有答案