翻译【ElasticSearch Server】第一章:开始使用ElasticSearch集群(7)

检索文档(Retrieving documents)

我们已经有文档存储在我们的实例。现在,让我们尝试检索它们:

1 curl -XGET http://localhost:9200/blog/article/1

 

然后服务器返回以下响应:

 1 {
 2 "_index" : "blog",
 3 
 4 "_type" : "article",
 5 "_id" : "1",
 6 "_version" : 1,
 7 "exists" : true,
 8 "_source" : {
 9 "title": "New version of Elastic Search released!",
10 "content": "...",
11 "tags": ["announce", "elasticsearch", "release"]
12 }

 

在响应中,除了索引、类型、标识和版本,我们还看到文档被找到的信息以及文档源。如果文档没有找到,我们得到的响应如下:

1 {
2 "_index" : "blog",
3 "_type" : "article",
4 "_id" : "9999",
5 "exists" : false
6 }

 

当然,没有关于版本和文档源的信息。

更新文档(Updating documents)

更 新文档的索引是一个更加复杂的任务。在内部,ElasticSearch心须获取文档,从_source字段移除旧的文档,应用变更并且索引它作为一个新 文档。ElasticSearch通过给定一个script参数来实现。这允许我们做比简单的字段改变更复杂的文档转换。让我们看看在一个简单的案例中它 是如何工作的:

然后执行下面的命令:

1 curl -XPOST http://localhost:9200/blog/article/1/_update
2 
3 -d '{
4 "script": "ctx._source.content = \"new content\""
5 }'

 

服务器响应如下:

 1 {
 2 
 3 "ok":true,
 4 
 5 "_index":"blog",
 6 
 7 "_type":"article",
 8 
 9 "_id":"1",
10 
11 "_version":2
12 
13 }

 

凑效了!的确,让我们检索当前文档:

 1 curl -XGET http://localhost:9200/blog/article/1
 2 
 3 {
 4 "_index" : "blog",
 5 
 6 "_type" : "article",
 7 "_id" : "1",
 8 "_version" : 2,
 9 "exists" : true,
10 "_source" : {
11 "title":"New version of Elastic Search released!",
12 "content":"new content",
13 "tags":["announce","elasticsearch","release"]}
14 }

 

服务器改变了我们的文章内容和文档的版本号。请注意,我们没有发送整个文档,仅仅改变了部分。但是请记住使用更新的功能,我们需要使用_source字段-我们在第三章将描述如何使用_source字段扩展你的索引结构的附加内部信息部分、扩展你的结构和搜索。

还有一件事是关于文档更新-如果你的脚本从文档使用一个字段值即被更新。如果文档没有价值,你可以用来设置一个值。例如,如果你想增加文档的计数器字段并且它不存在,您可以在您的请求中使用upsert提供默认值。例如:

1 curl -XPOST http://localhost:9200/blog/article/1/_update
2 
3 -d '{
4 "script": "ctx._source.counter += 1",
5 "upsert": {
6 "counter" : 0
7 }
8 
9 }'

 

在前面的例子中,如果我们更新的文档没有计数器字段,0的值将被使用。

删除文档(Deleting documents)

我们已经看到如何创建(PUT)和检索(GET)文档。可以以类似的方式删除一个文档,但唯一的区别是在动词的使用。让我们执行以下删除命令:

 1 curl -XDELETE http://localhost:9200/blog/article/1
 2 {
 3 
 4 "ok":true,
 5 
 6 "found":true,
 7 
 8 "_index":"blog",
 9 
10 "_type":"article",
11 
12 "_id":"1",
13 
14 "_version":1
15 
16 }

 

现在我们可以使用CRUD操作。这使我们能够使用ElasticSearch作为一个简单的键值存储来创建应用程序。但这只是开始!

posted @ 2013-12-11 16:09  jefurry  阅读(1024)  评论(2编辑  收藏  举报