es的相关知识三(检查文档是否存在以及更新整个文档以及局部更新)

一、检索文档是否存在

如果你想做的只是检查文档是否存在——你对内容完全不感兴趣——使用 HEAD  方法来代替 GET  。 HEAD  请求不会返回响应
体,只有HTTP头:

curl -i -XHEAD http://localhost:9200/{index}/{type}/{id}

Elasticsearch将会返回 200 OK  状态如果你的文档存在:

HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
Content-Length: 0

如果不存在返回 404 Not Found  :

HTTP/1.1 404 Not Found
Content-Type: text/plain; charset=UTF-8
Content-Length: 0

二、更新整个文档:

文档在Elasticsearch中是不可变的——我们不能修改他们。如果需要更新已存在的文档,我们可以使用index  API 重建索引(reindex) 或者替换掉它。

PUT /{index}/{type}/{id}
{
"title": "My first blog entry",
"text": "I am starting to get the hang of this...",
"date": "2014/01/02"
}

在响应中,我们可以看到Elasticsearch把 _version  增加了。

{
"_index" : "...",
"_type" : "...",
"_id" : "...",
"_version" : 2,
"created": false <1>
}

在内部,Elasticsearch已经标记旧文档为删除并添加了一个完整的新文档。旧版本文档不会立即消失,但你也不能去访问
它。Elasticsearch会在你继续索引更多数据时清理被删除的文档。

更新文档的过程是:

1. 从旧文档中检索JSON
2. 修改它
3. 删除旧文档
4. 索引新文档

三、文档的局部更新

使用 update  API,我们可以使用一个请求来实现局部更新,例如增加数量的操作。
我们也说过文档是不可变的——它们不能被更改,只能被替换。 update  API必须遵循相同的规则。表面看来,我们似乎是局
部更新了文档的位置,内部却是像我们之前说的一样简单的使用 update  API处理相同的检索-修改-重建索引流程,我们也减
少了其他进程可能导致冲突的修改。
最简单的 update  请求表单接受一个局部文档参数 doc  ,它会合并到现有文档中——对象合并在一起,存在的标量字段被覆
盖,新字段被添加。举个例子,我们可以使用以下请求为博客添加一个 tags  字段和一个 views  字段:

POST /{index}/{type}/{id}/_update
{
"doc" : {
"tags" : [ "testing" ],
"views": 0
}
}

如果请求成功,我们将看到类似 index  请求的响应结果:

{
"_index" : "...",
"_id" : "...",
"_type" : "...",
"_version" : 3
}

检索文档文档显示被更新的 _source  字段:

{
"_index": "...",
"_type": "...",
"_id": "...",
"_version": 3,
"found": true,
"_source": {
"title": "My first blog entry",
"text": "Starting to get the hang of this...",
"tags": [ "testing" ], <1>
"views": 0 <1>
}
}

猜你喜欢

转载自blog.csdn.net/qq_40651753/article/details/86010486
今日推荐