ES中更新字段和删除字段的操作

简介: ES中更新字段和删除字段的操作

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站点击跳转浏览。


ES中更新某一个字段,以及添加某一个字段


PUT test/type1/1
{
    "counter" : 1,
    "tags" : ["red"]
}

执行以下操作


POST test/type1/1/_update
{
    "script" : {
        "source": "ctx._source.counter += params.count",
        "lang": "painless",
        "params" : {
            "count" : 4
        }
    }
}

查看一下结果

{
  "_index": "test",
  "_type": "type1",
  "_id": "1",
  "_version": 3,
  "found": true,
  "_source": {
    "counter": 5,
    "tags": [
      "red"
    ]
  }
}

执行二

POST test/type1/1/_update
{
    "script" : {
        "source": "ctx._source.tags.add(params.tag)",
        "lang": "painless",
        "params" : {
            "tag" : "blue"
        }
    }
}

查看结果

{
  "_index": "test",
  "_type": "type1",
  "_id": "1",
  "_version": 2,
  "found": true,
  "_source": {
    "counter": 1,
    "tags": [
      "red",
      "blue"
    ]
  }
}

除_source外,通过ctx映射还可以使用以下变量:_index,_type,_id,_version,_routing,_parent和_now(当前时间戳)。

还可以在文档中添加一个新字段


POST test/type1/1/_update
{
    "script" : "ctx._source.new_field = 'value_of_new_field'"
}


结果如下:


{
  "_index": "test",
  "_type": "type1",
  "_id": "1",
  "_version": 4,
  "found": true,
  "_source": {
    "counter": 5,
    "tags": [
      "red",
      "blue"
    ],
    "new_field": "value_of_new_field"
  }
}


ES中删除某个字段


POST test/type1/1/_update
{
    "script" : "ctx._source.remove('new_field')"
}

查看一下数据


{
  "_index": "test",
  "_type": "type1",
  "_id": "1",
  "_version": 5,
  "found": true,
  "_source": {
    "counter": 5,
    "tags": [
      "red",
      "blue"
    ]
  }
}


而且,我们甚至可以改变执行的操作: 如果标签字段包含蓝色,则此示例将删除该文档,否则它将不执行任何操作(noop)


POST test/type1/1/_update
{
    "script" : {
        "source": "if (ctx._source.tags.contains(params.tag)) { ctx.op = 'delete' } else { ctx.op = 'none' }",
        "lang": "painless",
        "params" : {
            "tag" : "blue"
        }
    }
}


查看一下数据


{
  "_index": "test",
  "_type": "type1",
  "_id": "1",
  "found": false
}
相关文章
|
8月前
|
存储 关系型数据库 索引
10. 在一个非主键字段上创建了索引, 想要根据该字段查询到数据, 需要查询几次 ?
在非主键字段上创建索引,查询数据通常需两次。对于MyISAM,先通过索引找到数据行指针,再获取数据;而InnoDB则先找主键ID,再从主键索引中查找数据。
50 0
|
5月前
|
JavaScript 前端开发
ES6 中新增的两种数据类型及类型判断 ( 二 )
ES6 中新增的两种数据类型及类型判断 ( 二 )
|
5月前
|
存储 JavaScript 前端开发
ES6 中新增的两种数据类型及类型判断 ( 一 )
ES6 中新增的两种数据类型及类型判断 ( 一 )
ES6新增操作字符串的七种方法
ES6新增操作字符串的七种方法
|
SQL 关系型数据库 MySQL
MySQL变量使用与介绍之为查询结果增加序号列和自定义序号列
SQL三:用户表(包含字段有:用户ID[自增]、姓名、性别、民族、出生日期、身份证号),无论查询条件如何,要求查询的结果显示一个行号列(即:第一行显示1,第二行显示2,第三行显示3,依此类推)
268 0
|
SQL 关系型数据库 MySQL
使用tkmapper避免更新on update字段
使用tkmapper避免更新on update字段
173 0
|
NoSQL 关系型数据库 MySQL
【已解决】MongoDB 中根据指定字段筛选出具有重复值的记录
【已解决】MongoDB 中根据指定字段筛选出具有重复值的记录
904 0
【已解决】MongoDB 中根据指定字段筛选出具有重复值的记录
|
开发者 Python
列表的修改查询和删除|学习笔记
快速学习列表的修改查询和删除
列表的修改查询和删除|学习笔记
|
SQL 关系型数据库 MySQL
你会不会用mysql查询近7个月的数据?没有记录默认为空
你会不会用mysql查询近7个月的数据?没有记录默认为空
231 0
你会不会用mysql查询近7个月的数据?没有记录默认为空

热门文章

最新文章

下一篇
开通oss服务