我在ElasticSearch 6.1中遇到一个我无法解决的问题,我不知道为什么。我已经多次阅读过这些文档,也许我错过了一些东西。
我有一个脚本化查询,需要先做一些计算才能确定记录是否可用。
以下是以下脚本: https://gist.github.com/dunice/a3a8a431140ec004fdc6969f77356fdf
我正在尝试使用以下源代码遍历数组字段:
"unavailability": [
{
"starts_at": "2018-11-27T18:00:00+00:00",
"local_ends_at": "2018-11-27T15:04:00",
"local_starts_at": "2018-11-27T13:00:00",
"ends_at": "2018-11-27T20:04:00+00:00"
},
{
"starts_at": "2018-12-04T18:00:00+00:00",
"local_ends_at": "2018-12-04T15:04:00",
"local_starts_at": "2018-12-04T13:00:00",
"ends_at": "2018-12-04T20:04:00+00:00"
},
]
执行脚本时会抛出错误:在使用[飞机]类型进行映射时找不到[不可用]字段
是否有任何线索可以使其发挥作用?
由于
更新
查询: https://gist.github.com/dunice/3ccd7d83ca6ddaa63c11013b84e659aa
更新2
映射: https://gist.github.com/dunice/f8caee114bbd917115a21b8b9175a439
数据示例: https://gist.github.com/dunice/8ad0602bc282b4ca19bce8ae849117ad
答案 0 :(得分:0)
您无法通过doc_values(即doc
)访问源文档中的数组。您需要通过_source
变量直接访问源文档,如下所示:
for(int i = 0; i < params._source['unavailability'].length; i++) {
请注意,根据您的ES版本,您可能需要尝试ctx._source
或仅_source
而不是params._source
答案 1 :(得分:0)
我用不同的方法解决了我的用例。
相反,将字段作为像unavailability
这样的对象数组,我决定创建两个字段作为datetime数组:
unavailable_from
unavailable_to
我的脚本遍历第一个字段,然后检查具有相同位置的第二个字段。
<强>更新强>
默认情况下禁用对_source
的直接访问:
https://github.com/elastic/elasticsearch/issues/17558