无痛脚本中的未定义变量

时间:2019-02-21 08:59:00

标签: javascript json elasticsearch elasticsearch-painless

我有一个具有这种结构的文档(伪代码,只是为了了解json中的结构):

source{
    id,
    property: {prop1, prop2}
}

我需要按prop1prop2对搜索结果进行排序。 我还有一个数组(在此处进行硬编码),它将尝试匹配字段“ id”。如果数组中包含id,则按prop1排序。否则通过prop2

这是json:

{
"query": {
  "bool" : {
    "must": { "match_all": {} }
  }
},
"sort": {
    "_script": {
        "script": {
          "lang":"painless",
          "inline":"[ 677 ].indexOf(doc['id']) !== -1 ? doc['property.prop1.raw'] : doc['property.prop1.raw.raw']"
        },
        "type": "string",
        "order": "asc"
    }
}
}

然后我得到的是:

{"type":"illegal_argument_exception","reason":"Variable [id] is not defined."}

我尝试了所有可能的组合。首先,将“ inline”替换为“ source”。 而且还可以使用以下选项之一:

doc['id']
doc[id]
doc['id.raw']
doc['id.raw.value']
doc['id.raw'].value
doc['id'].raw.value

它总是产生相同的错误。我在做什么错了?


编辑


这是实际文件:

{
_index: "myindex",
_type: "cases",
_id: "72",
found: true,
_source: {
    id: 72,
    property: {
        id: 72,
        prop1: "a",
        prop2: "b"
    }
}
}

0 个答案:

没有答案