简介
elasticsearch 有内置的脚本支持,可以基于groovy脚本实现复杂的操作。
数据准备
基本操作
1、将 id 为1 的商品降价100元:
GET /product/sku/1/_update
{
"script": "ctx._source.price-=100"
}
2、将 id 为1 的商品名改为:"huawei999":
GET /product/sku/1/_update
{
"script": "ctx._source.name='huawei999'"
}
3、将 id 为1 的商品增加标签 "促销":
GET /product/sku/1/_update
{
"script": {
"source":"ctx._source.tag.add(params.tag)",
"params":{"tag":"促销"}
}
}
4、将 id 为 1 的商品删除标签 "促销":
GET /product/sku/1/_update
{
"script": {
"source":"ctx._source.tag.remove(ctx._source.tag.indexOf(params.tag))",
"params":{"tag":"促销"}
}
}
5、使用upsert
更新商品信息,商品不存在时则新建商品:
GET /product/sku/4/_update
{
"script": "ctx._source.stock+=100",
"upsert": {
"name": "huawei99",
"category": "phone",
"brand": "huawei",
"price": 0,
"stock": 0,
"tag": ["新品"],
"delete": false,
"desc": "abc,def",
"create_time": "2015-05-01",
"modify_time": "2015-05-10"
}
}
查询商品:
"_source": {
"name": "huawei99",
"category": "phone",
"brand": "huawei",
"price": 0,
"stock": 0,
"tag": [
"新品"
],
"delete": false,
"desc": "abc,def",
"create_time": "2015-05-01",
"modify_time": "2015-05-10"
}
再次执行更新,查询商品: