Elasticsearch 面向文档型数据库,这意味着它存储的是整个对象或者 文档,它不但会存储它们,还会为他们建立索引,这样你就可以搜索他们了。你可以在 Elasticsearch 中索引、搜索、排序和过滤这些文档。不需要成行成列的数据。


所以为了创建员工名单,我们需要进行如下操作:


为每一个员工的 文档 创建索引,每个 文档 都包含了一个员工的所有信息。

每个文档都会被标记为 employee 类型。

这种类型将存活在 megacorp 这个 索引 中。

这个索引将会存储在 Elasticsearch 的集群中


注意在 /megacorp/employee/1 路径下,包含了三个部分:


名字 内容

megacorp 索引的名字

employee 类型的名字

1 当前员工的ID



PUT /megacorp/employee/1

{

"first_name" : "John",

"last_name" :  "Smith",

"age" :        25,

"about" :      "I love to go rock climbing",

"interests": [ "sports", "music" ]

}



现在,我们已经在 Elasticsearch 中存储了一些数据,我们可以开始根据这个项目的需求进行工作了。第一个需求就是要能搜索每一个员工的数据。


对于 Elasticsearch 来说,这是非常简单的。我们只需要执行一次 HTTP GET 请求,然后指出文档的地址,也就是索引、类型以及 ID 即可。通过这三个部分,我们就可以得到原始的 JSON 文档:


GET /megacorp/employee/1


返回的内容包含了这个文档的元数据信息,而 John Smith 的原始 JSON 文档也在 _source 字段中出现了:


{

"_index" :   "megacorp",

"_type" :    "employee",

"_id" :      "1",

"_version" : 1,

"found" :    true,

"_source" :  {

"first_name" :  "John",

"last_name" :   "Smith",

"age" :         25,

"about" :       "I love to go rock climbing",

"interests":  [ "sports", "music" ]

}

}


全文搜索

上面的搜索都很简单:名字搜索、通过年龄过滤。接下来我们来学习一下更加复杂的搜索,全文搜索——一项在传统数据库很难实现的功能。 我们将会搜索所有喜欢 rock climbing 的员工:


GET /megacorp/employee/_search

{

"query" : {

"match" : {

"about" : "rock climbing"

}

}

}