Bootstrap

es执行_update_by_query要注意

背景:

一次给es新增字段,并且拷贝字段的操作,采用

curl -X POST "http://localhost:9200/xxx/_update_by_query" -H 'Content-Type: application/json' -d'
{
  "script": {
    "source": "ctx._source.didstr = ctx._source.did.toString()"
  }
}'

执行结果返回

curl: (52) Empty reply from server
 

es里面总的数据差不多1k条,也不多,但就这个看似简单的操作,执行还是错误了。

原因:

资源不足,当时在内网测试环境执行的时候并没有出现错误。

解决办法:

使用size,分批执行

curl -X POST "http://localhost:9200/xxx/_update_by_query" -H 'Content-Type: application/json' -d'
{
  "script": {
    "source": "ctx._source.didstr = ctx._source.did.toString()",
    "lang": "painless"
  },
  "size": 10,
  "query": {
    "exists": {
      "field": "did"
    }
  }
}'

像上面这个每次10个,10个的处理,就能正常执行完。

;