【问题标题】:Elasticsearch Painless: Error when using three quotes: Unexpected Character ('\"' (code 34))Elasticsearch Painless:使用三个引号时出错:意外字符('\"'(代码 34))
【发布时间】:2019-05-01 02:52:18
【问题描述】:

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

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

{
  "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]

有什么想法吗?

【问题讨论】:

  • 你运行的是哪个 ES 版本?它至少在 6.6.1 上有效。
  • 我正在运行 7.0.0。这太奇怪了。现在它没有给我错误。我在 Kibana、over curl 和 Postman 中尝试过,现在都返回了正确的结果。不知道最初是什么导致了这个问题。 ://
  • 呃,我说错了。我想我正在使用上面那个“有效”的脚本哈哈。好的,刚刚通过 Postman 又试了一次,还是一样的错误。
  • 好的,我会检查 7 并反馈

标签: elasticsearch elasticsearch-painless


【解决方案1】:

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

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

注意事项:

  • 使用 'ticks' 包装脚本
  • 你必须在每一行的末尾逃跑,否则 Painless 会抱怨。

然后在消息正文中:

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

这会从 Elasticsearch 产生正确的结果

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-11-24
      • 2022-01-24
      • 2019-05-29
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 2018-08-15
      • 2021-02-06
      • 1970-01-01
      相关资源
      最近更新 更多