确保创建一个新文档的最简单办法是,使用索引请求的 POST 形式让 Elasticsearch 自动生成唯一 _id :

POST /website/blog/
{ ... }

如果已经有自己的 _id ,那么我们必须告诉 Elasticsearch ,只有在相同的 _index 、 _type 和 _id 不存在时才接受我们的索引请求。这里有两种方式,

第一种方法使用 op_type 查询-字符串参数:

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

第二种方法是在 URL 末端使用 /_create :

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

如果创建新文档的请求成功执行,Elasticsearch 会返回元数据。

{
    "_index": "website",
    "_type": "blog",
    "_id": "124",
    "_version": 1,
    "result": "created",
    "_shards": {
        "total": 2,
        "successful": 2,
        "failed": 0
    },
    "_seq_no": 3,
    "_primary_term": 1
}

【Elasticsearch 权威指南学习笔记】创建文档_Elasticsearch

 

另一方面,如果具有相同的 _index 、 _type 和 _id 的文档已经存在,Elasticsearch 将会返回 409 Conflict 响应码,以及如下的错误信息:

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

【Elasticsearch 权威指南学习笔记】创建文档_Elasticsearch_02