Administrator
Published on 2023-07-06 / 59 Visits
0

elasticsearch的增删改

一、elasticsearch单节点的增删改

1.指定ID新增文档

PUT /student/_doc/1
{
  "age": 1,
  "name": "老王",
  "sex": "女"
}
{
  "_index" : "student",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 3
}

2.不指定ID新增文档

POST /student/_doc
{
  "age": 2,
  "name": "老张",
  "sex": "男"
}
{
  "_index" : "student",
  "_type" : "_doc",
  "_id" : "L3b_KIkB38DR8QwSbMmC",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "_seq_no" : 4,
  "_primary_term" : 3
}

3.通过ID修改文档

PUT /student/_doc/1
{
  "age": 2,
  "name": "老王",
  "sex": "女"
}
{
  "_index" : "student",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 5,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "_seq_no" : 5,
  "_primary_term" : 3
}

4.通过乐观锁修改文档

说明:在查询文档时会返回一个版本号 _version 在修改时带上,比已存在文档版本号更大的号码才可修改,否则修改失败。

测试当前数据如下

{
  "_index" : "student",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 11,
  "_seq_no" : 11,
  "_primary_term" : 3,
  "found" : true,
  "_source" : {
    "age" : 3,
    "name" : "老王",
    "sex" : "女"
  }
}

4.1 修改版本号小于等于当前版本号

当前版本号为11,测试用11或11以下的版本号修改

POST /student/_doc/1?version=11&version_type=external
{
  "age": 3,
  "name": "老王",
  "sex": "女"
}
{
  "error": {
    "root_cause": [
      {
        "type": "version_conflict_engine_exception",
        "reason": "[1]: version conflict, current version [11] is higher or equal to the one provided [11]",
        "index_uuid": "3sHlLImRTC-_89cCsdO4JQ",
        "shard": "0",
        "index": "student"
      }
    ],
    "type": "version_conflict_engine_exception",
    "reason": "[1]: version conflict, current version [11] is higher or equal to the one provided [11]",
    "index_uuid": "3sHlLImRTC-_89cCsdO4JQ",
    "shard": "0",
    "index": "student"
  },
  "status": 409
}

4.2 修改版本号大于当前版本号
POST /student/_doc/1?version=20&version_type=external
{
  "age": 3,
  "name": "老王",
  "sex": "女"
}
{
  "_index" : "student",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 20,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "_seq_no" : 12,
  "_primary_term" : 3
}

5.批量修改单个字段

POST /student/_update/1
{
  "script":"ctx._source.age += 5"
}
{
  "_index" : "student",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 2,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "_seq_no" : 15,
  "_primary_term" : 3
}

6.通过ID删除文档

DELETE /student/_doc/1
{
  "_index" : "student",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 21,
  "result" : "deleted",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "_seq_no" : 13,
  "_primary_term" : 3
}

7.通过ID查询文档

GET /student/_doc/1
{
  "_index" : "student",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 14,
  "_primary_term" : 3,
  "found" : true,
  "_source" : {
    "age" : 1,
    "name" : "老王",
    "sex" : "女"
  }
}
、