Elasticsearch 权威指南
  • Elasticsearch 权威指南
  • 入门
    • 初识
    • 安装
    • API
    • 文档
    • 索引
    • 搜索
    • 汇总
    • 小结
    • 分布式
    • 本章总结
  • 分布式集群
    • 空集群
    • 集群健康
    • 添加索引
    • 容错移转
    • 横向扩展
    • 扩展
    • 故障恢复
  • 数据
    • 文档
    • 索引
    • Get
    • 存在
    • 更新
    • 创建
    • 删除
    • 版本控制
    • 局部更新
    • Mget
    • Bulk
    • 总结
  • 分布式文档存储
    • 路由
    • 主从互通
    • 创建索引删除
    • 获取
    • 局部更新
    • 批量请求
    • 批量格式
  • 搜索
    • 空白搜索
    • 多索引多类型
    • 分页
    • 查询语句
  • 映射与统计
    • Exact_vs_full_text
    • Inverted_index
    • Analysis
    • Mapping
    • Complex_datatypes
Powered by GitBook
On this page

Was this helpful?

  1. 数据

创建

当我们索引一个文档时,如何确定我们是创建了一个新的文档还是覆盖了一个已经存在的文档呢?

请牢记_index,_type以及_id组成了唯一的文档标记,所以为了确定我们创建的是全新的内容,最简单的方法就是使用POST方法,让Elasticsearch自动创建不同的_id:

POST /website/blog/
{ ... }

然而,我们可能已经决定好了_id,所以需要告诉Elasticsearch只有当_index,_type以及_id这3个属性全部相同的文档不存在时才接受我们的请求。实现这个目的有两种方法,他们实质上是一样的,你可以选择你认为方便的那种:

第一种是在查询中添加op_type参数:

PUT /website/blog/123?op_type=create
{ ... }

或者在请求最后添加 /_create:

PUT /website/blog/123/_create
{ ... }

如果成功创建了新的文档,Elasticsearch将会返回常见的元数据以及201 Created的HTTP反馈码。

而如果存在同名文件,Elasticsearch将会返回一个409 Conflict的HTTP反馈码,以及如下方的错误信息:

{
  "error" : "DocumentAlreadyExistsException[[website][4] [blog][123]:
             document already exists]",
  "status" : 409
}
Previous更新Next删除

Last updated 5 years ago

Was this helpful?