翻译【ElasticSearch Server】第一章:开始使用ElasticSearch集群(6)
创建一个新文档(Creating a new document)
现在我们将尝试索引一些文档。对于我们的示例,让我们想象我们正在为我们的博客建立某种CMS。实体之一是博客的文章。使用JSON记法,在以下的例子中一个文档可以如下所示:
1 { 2 "id": "1", 3 "title": "New version of Elastic Search released!", 4 "content": "…", 5 "priority": 10, 6 "tags": ["announce", "elasticsearch", "release"] 7 }
正 如我们所看到的,JSON文档包含一组字段,每个字段可以不同的形式。在我们的例子中,我们有一个数字(priority)、文本(title)和一个字 符串数组(tags)。在接下来的例子中,我们将向您展另一个类型。如前所述,ElasticSearch能猜到这些类型(因为JSON是semi- typed,就是说数字没有引号)并自动在它的内部结构自定义存储数据的方式。
现在我们想将这个记录存储在索引并使其可用于搜索。选择索引名称blog和索引类型article,我们可以通过执行以下命令:
1 curl -XPUT http://localhost:9200/blog/article/1 2 -d '{"title": "New version of Elastic Search released!", 3 "content": "...", 4 "tags": ["announce", "elasticsearch", "release"] }'
你可以注意到CURL的新选项-d,这个选项的参数值的文本应该用作请求负载-一个请求体。这样我们可以发送更多的信息,如文档定义。
注意,唯一标识符是放置在URL中而不是请求体中。如果您忽略这个标识符,搜索会返回一个错误,类似如下:
1 No handler found for uri [/blog/article/] and method [PUT]
如果一切都是正确的,服务器将用JSON响应,类似于:
1 { 2 "ok":true, 3 "_index":"blog", 4 "_type":"article", 5 "_id":"1", 6 "_version":1 7 }
在前面的响应中,ElasticSearch包含操作的状态信息和显示新文档被放置的地方。有文档的唯一标识符和当前版本信息,版本号将由ElasticSearch每次文档自动递增变化。
在 上面的例子中,我们已经指定文档的标识符。但ElasticSearch可以自动生成。这似乎是非常方便的,但是只有当一个索引是唯一的数据源才适用。如 果我们使用一个数据库来存储数据和使用ElasticSearch来全文搜索,同步这些数据将会受阻,除非生成的标识符也是存储在数据库中。通过使用下面 的命令能实现生成一个唯一键。
1 curl -XPOST http://localhost:9200/blog/article/ -d 2 '{"title": "New version of Elastic Search released!", 3 "content": "...", 4 "tags": ["announce", "elasticsearch", "release"] }'
注意是POST而不是PUT。参阅前一章REST动词,我们想要改变一个索引列表而不是创建一个新的实体,这就是为什么我们使用POST而不是PUT。服务器的响应应该类似如下:
1 { 2 "ok" : true, 3 "_index" : "blog", 4 "_type" : "article", 5 "_id" : "XQmdeSe_RVamFgRHMqcZQg", 6 "_version" : 1 7 }
注意突出显示的行,有一个自动生成的唯一示标识符。