1、document的全量替换

(1)语法与创建文档是一样的,如果document id不存在,那么就是创建;如果document id已经存在,那么就是全量替换操作,替换document的json串内容
(2)document是不可变的,如果要修改document的内容,第一种方式就是全量替换,直接对document重新建立索引,替换里面所有的内容
(3)es会将老的document标记为deleted,然后新增我们给定的一个document,当我们创建越来越多的document的时候,es会在适当的时机在后台自动删除标记为deleted的document
创建:

  1. PUT /shop/_doc/2
  2. {
  3. "name" : "huawei Mate30",
  4. "price" : "7890",
  5. "system" : "hongmeng 1.0",
  6. "CPU" : "qinglin 990"
  7. }
  8. {
  9. "_index" : "shop",
  10. "_type" : "_doc",
  11. "_id" : "2",
  12. "_version" : 1,
  13. "result" : "created",
  14. "_shards" : {
  15. "total" : 2,
  16. "successful" : 1,
  17. "failed" : 0
  18. },
  19. "_seq_no" : 1,
  20. "_primary_term" : 1
  21. }

全量替换:

PUT /shop/_doc/2
{
  "name" : "huawei Mate30",
  "price" : "9890",
  "system" : "hongmeng 3.0",
  "CPU" : "qinglin 990"
}


{
  "_index" : "shop",
  "_type" : "_doc",
  "_id" : "2",
  "_version" : 2,       # 版本号改变了
  "result" : "updated",     # result  update
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 2,
  "_primary_term" : 1
}

最开始创建的 document 不会被物理删除, 只是做了 delete 标识,只有当 ES 中的数据量很多的时候 ES 才会真正的物理删除


2、document的强制创建

(1)创建文档与全量替换的语法是一样的,有时我们只是想新建文档,不想替换文档,如果强制进行创建呢?
(2)PUT /index/_doc/id?op_type=create,PUT /index/_doc/id/_create
强制创建:

PUT /shop/_doc/2/_create
{
  "name" : "huawei Mate30",
  "price" : "9890",
  "system" : "hongmeng 4.0",
  "CPU" : "qinglin 990"
}

{
  "error": {
    "root_cause": [
      {
        "type": "version_conflict_engine_exception",
        "reason": "[2]: version conflict, document already exists (current version [2])",
        "index_uuid": "vh1E-Q14Tb2htCPsd9B32g",
        "shard": "0",
        "index": "shop"
      }
    ],
    "type": "version_conflict_engine_exception",
    "reason": "[2]: version conflict, document already exists (current version [2])",
    "index_uuid": "vh1E-Q14Tb2htCPsd9B32g",
    "shard": "0",
    "index": "shop"
  },
  "status": 409
}

3、document的删除

(1)DELETE /index/_doc/id
(2)不会直接物理删除,只会将其标记为deleted,当数据越来越多的时候,在后台自动删除