Elasticsearch搜索引擎学习之五——创建雇员索引

高新技术,ElasticSearch

2017-06-04

131

0

目录


上文我们简单介绍了Elasticsearch中索引的概念,为了对 Elasticsearch 能实现什么及其上手容易程度有一个基本印象,让我们从一个简单的教程开始并介绍索引、搜索及聚合等基础概念。

创建一个雇员目录

我们受雇于 Megacorp 公司,作为 HR 部门新的 “热爱无人机” (_"We love our drones!"_)激励项目的一部分,我们的任务是为此创建一个雇员目录。该目录应当能培养雇员认同感及支持实时、高效、动态协作,因此有一些业务需求:

  • 支持包含多值标签、数值、以及全文本的数据
  • 检索任一雇员的完整信息
  • 允许结构化搜索,比如查询 30 岁以上的员工
  • 允许简单的全文搜索以及较复杂的短语搜索
  • 支持在匹配文档内容中高亮显示搜索片段
  • 支持基于数据创建和管理分析仪表盘

索引雇员文档

第一个业务需求就是存储雇员数据。 这将会以 雇员文档 的形式存储:一个文档代表一个雇员。存储数据到Elasticsearch的行为叫做 引 ,但在索引一个文档之前,需要确定将文档存储在哪里。

一个 Elasticsearch 集群可以 包含多个索引 ,相应的每个索引可以包含多个类型 。 这些不同的类型存储着多个文档 ,每个文档又有多个属性。

索引(名词):

如前所述,一个索引类似于传统关系数据库中的一个数据库 ,是一个存储关系型文档的地方。 索引 (index) 的复数词为 indices 或 indexes 。

索引(动词):

索引一个文档就是存储一个文档到一个索引 (名词)中以便它可以被检索和查询到。这非常类似于 SQL 语句中的 INSERT 关键词,除了文档已存在时新文档会替换旧文档情况之外。

倒排索引:

关系型数据库通过增加一个 索引 比如一个 B树(B-tree)索引 到指定的列上,以便提升数据检索速度。Elasticsearch 和 Lucene 使用了一个叫做 倒排索引 的结构来达到相同的目的。

默认的,一个文档中的每一个属性都是被索引 的(有一个倒排索引)和可搜索的。一个没有倒排索引的属性是不能被搜索到的。我们将在倒排索引 讨论倒排索引的更多细节。

对于雇员目录,我们将做如下操作:

  • 每个雇员索引一个文档,包含该雇员的所有信息。
  • 每个文档都将是 employee 类型 。
  • 该类型位于 索引 megacorp 内。
  • 该索引保存在我们的 Elasticsearch 集群中。

通过如下命令,我们来增加一名员工:

PUT /megacorp/employee/1
{
    "first_name" : "John",
    "last_name" :  "Smith",
    "age" :        25,
    "about" :      "I love to go rock climbing",
    "interests": [ "sports", "music" ]
}

 使用CURL请求结果如下:

由于我发送了多次PUT命令,因此这里的result显示为updated,created为false,如果是初次添加,应该分别为created和true。

{
  "_index" : "megacorp",
  "_type" : "employee",
  "_id" : "4",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "created" : true
}

注意,路径 /megacorp/employee/1 包含了三部分的信息:

  • megacorp:索引名称
  • employee:类型名称
  • 1:特定雇员的ID

此时,我们已经成功添加了一个文档,对应了一个雇员。我们在使用相同的方式添加多个雇员:

PUT /megacorp/employee/2
{
    "first_name" :  "Jane",
    "last_name" :   "Smith",
    "age" :         32,
    "about" :       "I like to collect rock albums",
    "interests":  [ "music" ]
}
PUT /megacorp/employee/3
{
    "first_name" :  "Douglas",
    "last_name" :   "Fir",
    "age" :         35,
    "about":        "I like to build cabinets",
    "interests":  [ "forestry" ]
}

  接下来,我们将使用一些简单的方式来尝试检索创建的这些文档。

总结

本文以一个示例为基础,创建并添加了部分数据到Elasticsearch中,每一个雇员对应了一个文档。接下来,我们开始尝试集中简单的检索方式。


前一篇:Elasticsearch搜索引擎学习之四——文档和索引
后一篇:Elasticsearch搜索引擎学习之六——索引雇员文档

belonk

轻轻地我走了,正如我轻轻地来,我挥一挥衣袖,不带走一片云彩