ElasticSearch教程 ElasticSearch Script update,1.x版本和2.x版本 Script语法更新Demo
我们稍微了解 ElasticSearch 都知道 ElasticSearch 支持Script
语法,用起来挺方便的。
一、Elasticsearch 1.x 版本 Script 语法。
1.curl 语法
curl -XPOST 'localhost:9200/demo/test/1/_update?pretty' -d '
{
"script" : "ctx._source.xcount += 5"
}'
这样会把index:demo ,type:test ,id:1
为条件的数据的xcount
字段在原基础上+5
。
ctx._source
指向数据的body
,也就是你存储的所有字段。
2.Elasticsearch Java API 语法
//构造一个Map,用于参数传递
Map<String, Object> paramsMap = Maps.newHashMap();
params.put("count", 10);
UpdateResponse response = client.prepareUpdate("demo", "test", "1")
//更新指定的字段
.setScript("ctx._source.xcount = count")
.setScriptParams(paramsMap)
//执行
.execute().actionGet();
如上代码,支持参数传递,也支持类似curl
语法中的+=5
类似的运算。
当然也支持字段之间的赋值。比如下面把当前数据的version
赋值给 xcount
。
//构造一个Map,用于参数传递
Map<String, Object> paramsMap = Maps.newHashMap();
params.put("count", 10);
UpdateResponse response = client.prepareUpdate("demo", "test", "1")
//更新指定的字段,把当前数据的version 赋值给 xcount 字段
.setScript("ctx._source.xcount = ctx._version")
.setScriptParams(paramsMap)
//执行
.execute().actionGet();
二、Elasticsearch 2.x 版本 Script 语法。
1.curl 语法
curl
语法其实和1.x
没变化,所以参考1.x
版本。
2.Elasticsearch Java API 语法
其实差不多,只是有点小变化。以前是直接传递字符串的 Script
现在需要传递 Script
对象。
UpdateResponse response = ESTools.client.prepareUpdate(index, type, id)
.setScript(new Script("ctx._source.xcount = ctx._version"))
.get();
当然,功能是变强大了,把具体的Script
脚本语法,变成面向对象的方式,复杂的可以用对象的方式解决,而不是像以前拼串一大堆。容易出错。
版权所属:SO JSON在线解析
原文地址:https://www.sojson.com/blog/205.html
转载时必须以链接形式注明原始出处及本声明。
如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。