ElasticSearch权威指南学习问题记录(1):设置 ctx.op 为 delete 来删除基于其内容的文档的curl执行错误

使用的ElasticSearch版本是6.4.2

原文:https://www.elastic.co/guide/cn/elasticsearch/guide/current/partial-updates.html

我们甚至可以选择通过设置 ctx.op 为 delete 来删除基于其内容的文档:

POST /website/blog/1/_update
{
   "script" : "ctx.op = ctx._source.views == count ? 'delete' : 'none'",
    "params" : {
        "count": 1
    }
}

直接拷贝curl在kibana的DevTools上执行是报错的:

{
  "error": {
    "root_cause": [
      {
        "type": "remote_transport_exception",
        "reason": "[node-0][127.0.0.1:9300][indices:data/write/update[s]]"
      }
    ],
    "type": "illegal_argument_exception",
    "reason": "failed to execute script",
    "caused_by": {
      "type": "script_exception",
      "reason": "compile error",
      "script_stack": [
        "... p = ctx._source.views == count ? 'delete' : 'none'",
        "                             ^---- HERE"
      ],
      "script": "ctx.op = ctx._source.views == count ? 'delete' : 'none'",
      "lang": "painless",
      "caused_by": {
        "type": "illegal_argument_exception",
        "reason": "Variable [count] is not defined."
      }
    }
  },
  "status": 400
}

原因是语法改变了,需要用新的语法写,新的如下所示:

POST /website/blog/1/_update
{

   "script": {
    "source" : "ctx.op = ctx._source.views == params.count ? 'delete' : 'none'",
    "params" : {
        "count": 1
    }
   }
}

curl格式如下所示:
curl -XPOST "http://localhost:9200/website/blog/1/_update" -H 'Content-Type: application/json' -d'
{

   "script": {
    "source" : "ctx.op = ctx._source.views == params.count ? \"delete\" : \"none\"",
    "params" : {
        "count": 1
    }
   }
}'

此写法参考的是这篇文章的解决方法:https://stackoverflow.com/questions/43079189/elasticsearch-script-variable-not-defined。这篇文章也是之前的示例“通过使用脚本给 tags 数组添加一个新的标签”报错的解决方法。

curl -XPOST localhost:9200/website/blog/1/_update?pretty -d '{
   "script" : {
       "inline": "ctx._source.tags.add(params.new_tag)",
       "params" : {
          "new_tag" : "tag2"
       }
   }
}'

其中将里面的inline改成了source,因为执行完后,DevTools提示inline写法已经被弃用,应使用最新写法source。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值