Elasticsearch Painless:使用三个引号时出错:意外字符(“ \””(代码34))

时间:2019-05-01 02:52:19

标签: elasticsearch elasticsearch-painless

我正在运行Elasticsearch的本地实例,并尝试在scripted_fields下使用“ painless”。我可以写一行脚本代码就好了,但是当我使用三引号(根据文档支持)创建多行脚本时,它给了我这个奇怪的解析错误。

运行单行脚本可以正常工作:

{
  "script_fields": {
    "scripted": {
      "script": {
        "lang": "painless",
        "source": "0"
      }
    }
  }
}

在每个结果中返回的每个实体此结果(预期):

"fields" : {
  "scripted" : [
    0
  ]
}

但是使用多行格式:

{
  "script_fields": {
    "scripted": {
      "script": {
        "lang": "painless",
        "source": 
        """
          0
        """
      }
    }
  }
}

给我这个错误:

Unexpected character ('\"' (code 34)): was expecting comma to separate Object entries\n at [Source: org.elasticsearch.transport.netty4.ByteBufStreamInput@56e69b76; line: 7, column: 12]

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我能够(至少)为Postman解决一个问题。您不能在邮递员正文JSON中使用多行字符串,因此请使用预先请求脚本。这是一个示例:

pm.environment.set("painless_script",`\
    return 0\
`);

注意:

  • 使用“勾号”包装脚本
  • 您必须逃避每一行的结尾,否则Painless会抱怨。

然后在邮件正文中:

{
  "script_fields": {
    "scripted": {
      "script": {
        "lang": "painless",
        "source": "{{painless_script}}"
      }
    }
  }
}

这会产生来自Elasticsearch的正确结果

答案 1 :(得分:0)

效果很好,只需确保它们是反勾号(`)而不是勾号(')。