es 中使用update 、create 、index的区别

文章目录

      • [1. `index` 操作](#1. index 操作)
        • [示例:`index` 操作](#示例:index 操作)
        • [Bulk 示例中的 `index` 操作:](#Bulk 示例中的 index 操作:)
      • [2. `create` 操作](#2. create 操作)
        • [示例:`create` 操作](#示例:create 操作)
        • [Bulk 示例中的 `create` 操作:](#Bulk 示例中的 create 操作:)
      • [3. `update` 操作](#3. update 操作)
        • [示例:`update` 操作](#示例:update 操作)
        • [Bulk 示例中的 `update` 操作:](#Bulk 示例中的 update 操作:)
      • [4. 区别总结](#4. 区别总结)
      • 总结

在 Elasticsearch 中, indexupdatecreate 是常用的操作类型,它们用于不同的场景,且具有不同的行为。下面详细解释这三个操作的区别,并提供相关的示例。

1. index 操作

  • 功能index 操作用于插入文档,如果文档的 _id 已经存在,则会覆盖该文档(即进行替换)。
  • 使用场景:适用于需要插入新文档,或者更新已有文档的场景。
  • 注意index 操作是幂等的(idempotent)。即使你多次执行相同的操作,只要文档内容没有变化,最终结果不会受到影响。
示例:index 操作
json 复制代码
POST /articles/_doc/1
{
  "title": "Tech News Today",
  "tags": ["tech", "news", "AI"]
}
  • 如果 _id1 的文档不存在,则会插入一个新的文档。

    POST /articles/_search

    [
    {
    "_index" : "articles",
    "_type" : "_doc",
    "_id" : "1",
    "_score" : 1.0,
    "_source" : {
    "title" : "Tech News Today",
    "tags" : [
    "tech",
    "news",
    "AI"
    ]
    }
    }
    ]

  • 如果 _id1 的文档已存在,则会被替换为新的文档。

    POST /articles/_doc/1
    {
    "title": "Tech News Today"
    }

    POST /articles/_search

    [
    {
    "_index" : "articles",
    "_type" : "_doc",
    "_id" : "1",
    "_score" : 1.0,
    "_source" : {
    "title" : "Tech News Today"
    }
    }
    ]

Bulk 示例中的 index 操作:
json 复制代码
{ "index": { "_id": 1 } }
{ "title": "Tech News Today", "tags": ["tech", "news", "AI"] }

2. create 操作

  • 功能create 操作用于插入新文档。如果文档的 _id 已经存在,操作会失败(返回错误)。这意味着该操作只能用于创建新文档,而不能更新或替换已有文档。
  • 使用场景:适用于你想要确保文档不存在时插入文档的情况。比如避免覆盖现有的文档。
示例:create 操作
json 复制代码
POST /articles/_doc/1/_create
{
  "title": "Tech News Today",
  "tags": ["tech", "news", "AI"]
}
  • 如果 _id1 的文档已存在,Elasticsearch 会返回错误,提示该文档已经存在。

    {
    "error" : {
    "root_cause" : [
    {
    "type" : "version_conflict_engine_exception",
    "reason" : "[1]: version conflict, document already exists (current version [2])",
    "index_uuid" : "mu6PYHhxTRSOOOjSZoPmaQ",
    "shard" : "0",
    "index" : "articles"
    }
    ],
    "type" : "version_conflict_engine_exception",
    "reason" : "[1]: version conflict, document already exists (current version [2])",
    "index_uuid" : "mu6PYHhxTRSOOOjSZoPmaQ",
    "shard" : "0",
    "index" : "articles"
    },
    "status" : 409
    }

  • 如果 _id1 的文档不存在,它将会被插入。

Bulk 示例中的 create 操作:
json 复制代码
{ "create": { "_id": 1 } }
{ "title": "Tech News Today", "tags": ["tech", "news", "AI"] }

3. update 操作

  • 功能update 操作用于更新已有的文档。如果文档存在,它会更新文档的部分内容;如果文档不存在,则会抛出错误。
  • 使用场景 :适用于部分更新文档的场景,特别是当你只需要更新文档的一部分字段时。update 操作不会覆盖整个文档,只会对指定字段进行修改。
示例:update 操作
json 复制代码
POST /articles/_doc/1/_update
{
  "doc": {
    "tags": ["tech", "news", "AI", "machine learning"]
  }
}
  • 如果 _id1 的文档存在,tags 字段将会被更新为新的值。

    POST /articles/_search

    [
    {
    "_index" : "articles",
    "_type" : "_doc",
    "_id" : "1",
    "_score" : 1.0,
    "_source" : {
    "title" : "Tech News Today",
    "tags" : [
    "tech",
    "news",
    "AI",
    "machine learning"
    ]
    }
    }
    ]

  • 如果 _id1 的文档不存在,Elasticsearch 会返回错误。

    DELETE articles

    POST /articles/_doc/1/_update
    {
    "doc": {
    "tags": ["tech", "news", "AI", "machine learning"]
    }
    }

    {
    "error" : {
    "root_cause" : [
    {
    "type" : "document_missing_exception",
    "reason" : "[_doc][1]: document missing",
    "index_uuid" : "B9MrCqCwT5u-GCvgdWB-Rw",
    "shard" : "0",
    "index" : "articles"
    }
    ],
    "type" : "document_missing_exception",
    "reason" : "[_doc][1]: document missing",
    "index_uuid" : "B9MrCqCwT5u-GCvgdWB-Rw",
    "shard" : "0",
    "index" : "articles"
    },
    "status" : 404
    }

Bulk 示例中的 update 操作:
json 复制代码
{ "update": { "_id": 1 } }
{ "doc": { "tags": ["tech", "news", "AI", "machine learning"] } }

4. 区别总结

操作类型 目标 说明 示例
index 插入或替换 文档插入,如果文档已经存在则会被替换。 POST /articles/_doc/1
create 插入 仅在文档不存在时插入文档,如果文档已存在,则返回错误。 POST /articles/_doc/1/_create
update 更新 仅更新文档的一部分内容,文档必须存在。如果文档不存在,则返回错误。 POST /articles/_doc/1/_update

总结

  • index 用于插入新文档或替换现有文档。
  • create 用于仅在文档不存在时插入新文档,若文档已存在则返回错误。
  • update 用于更新现有文档的部分内容,若文档不存在则返回错误。
相关推荐
小羊没烦恼!1 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
一隅论数智1 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
尧炎科技1 天前
防潮抗变形,就选纯品梅花全桉多层板
大数据
程序员大阳1 天前
副队长大数据教程(5)--集群情况下虚拟机网络配置
大数据·集群·nat·网路
自由能燃气设备1 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远1 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
嘉立创FPC苗工1 天前
FPC与机器人的双向赋能,解锁智能装备进化新势能
大数据·人工智能·制造·fpc·电路板
AI职业加油站1 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
龙亘川1 天前
一网统管AI平台民生业务实践:基于城市数字底座赋能公积金业务服务升级
大数据·安全·智慧城市·开源软件·数据可视化·政务
码流子1 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构