沙师弟,师父的充电器掉了

es update字段时,如何将数值再除以2 ?

匿名 | 发布于2018年11月21日 | 阅读数:3658

 
在es里面 update字段时如何把数值再除以2 ?
就 像sql 语句 update user set age= age / 2   where id=02  这样的,在es里面如何实现 ?
 
 
这是我更新时的指令:
GET user/doc/02/_update
{
"doc" : {
"age" : "38"
},
"doc_as_upsert" : true
}
已邀请:

medcl - 今晚打老虎。

赞同来自: laoyang360 zz_hello

age  不改成数字类型,效率比较低。不过也可以写,如下:
PUT user/doc/02
{
"age" : "38"
}

POST user/doc/02/_update
{
"script" : {
"source": """
ctx._source.age = (Float.parseFloat(ctx._source.age)/params.count).toString();
""",
"lang": "painless",
"params" : {
"count" : 2
}
}
}

GET user/doc/02

zz_hello

赞同来自:

采用script实现
POST test/_doc/1/_update
{
"script" : {
"source": "ctx._source.age /= params.count",
"lang": "painless",
"params" : {
"count" : 2
}
}
}
不知道这个/=可以不以。。。示例中是+=,你试试看

laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自:

同上,借助script脚本对传入值修改并更新

axu999 - 90后IT男

赞同来自:

但是报 ​"reason": "Cannot apply [/] operation to types [java.lang.String] and [java.lang.Integer]."  错误。
 
我字段的类型是keyword,详细请看截图。

QQ图片20181122115931.png

 

要回复问题请先登录注册