首页 > 解决方案 > 如何使用他们的节点客户端将脚本放入弹性搜索?

问题描述

我正在使用带有elasticsearch版本6.4的最新版本的elasticsearch npm ,并尝试将新的.script

根据他们的文件putScript函数需要idbody属性。

因此,当我尝试调用它时,例如:

client.putScript({
    id: 'date_formatter',
    body: {
        lang: "painless",
        source: `// Get each field value as string
            String datetime = doc[params.field].value.toString();
            // Create format object based on string
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern(params.format);
            // cast datetime into ZonedDateTime to use format function
            ZonedDateTime zdt = ZonedDateTime.parse(datetime);
            // return formatted date
            return zdt.format(formatter);`
    }
})

{ acknowledged: true }按预期返回,但是当我通过kibana检查它时,它返回:

{
  "_id": "date_formatter",
  "found": true,
  "script": {
    "lang": "mustache",
    "source": """{"lang":"painless"}"""
  }
}

有没有办法通过节点客户端script放入elasticsearch ?

标签: node.jselasticsearch

解决方案


您需要以与此处描述的方式基本相同的方式将两者包装lang一个部分source中:script

client.putScript({
    id: 'date_formatter',
    body: {
        script: {
            lang: "painless",
            source: `// Get each field value as string
                String datetime = doc[params.field].value.toString();
                // Create format object based on string
                DateTimeFormatter formatter = DateTimeFormatter.ofPattern(params.format);
                // cast datetime into ZonedDateTime to use format function
                ZonedDateTime zdt = ZonedDateTime.parse(datetime);
                // return formatted date
                return zdt.format(formatter);`
            }
        }
    })

推荐阅读