我正在尝试按照官方文档学习 Elastic Search 中的无痛脚本编写。 (https://www.elastic.co/guide/en/elasticsearch/painless/6.0/painless-examples.html https://www.elastic.co/guide/en/elasticsearch/painless/6.0/painless-examples.html )
我正在使用的文档示例:
{
"uid" : "CT6716617",
"old_username" : "xyz",
"new_username" : "abc"
}
使用 params._source 访问文档值的以下脚本字段查询有效:
{
"script_fields": {
"sales_price": {
"script": {
"lang": "painless",
"source": "(params._source.old_username != params._source.new_username) ? \"change\" : \"nochange\"",
"params": {
"change": "change"
}
}
}
}
}
相同的查询但使用文档映射来访问值失败:
{
"script_fields": {
"sales_price": {
"script": {
"lang": "painless",
"source": "(doc['old_username'] != doc['new_username']) ? \"change\" : \"nochange\"",
"params": {
"change": "change"
}
}
}
}
}
我收到的错误消息是:
"caused_by" : {
"type" : "illegal_argument_exception",
"reason" : "Variable [old_username] is not defined."
}
根据文档,这两种方法都应该有效,尤其是第二种方法。我不确定我在这里缺少什么。?