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"

        }

    }

}