我们已经有文档存储在我们的实例。现在,让我们尝试检索它们:
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 }
当然,没有关于版本和文档源的信息。
更 新文档的索引是一个更加复杂的任务。在内部,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的值将被使用。
我们已经看到如何创建(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作为一个简单的键值存储来创建应用程序。但这只是开始!