我对索引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']
提前谢谢。