美文网首页
初学ElasticSearch系列之五 索引

初学ElasticSearch系列之五 索引

作者: 我的小鱼干去哪儿了 | 来源:发表于2017-09-28 18:56 被阅读0次

背景

假设我们正在为一个名叫 megacorp 的公司的 HR 部门制作一个新的员工名单系统,这些名单应该可以满足实时协同工作,所以它应该可以满足以下要求:

  • 数据可以包含多个值的标签、数字以及纯文本内容。
  • 可以检索任何职员的所有数据。
  • 允许结构化搜索。例如,查找30岁以上的员工。
  • 允许简单的全文搜索以及相对复杂的短语搜索。
  • 在返回的匹配文档中高亮关键字。
  • 拥有数据统计与管理的后台。

为员工档案创建索引

  1. 存储员工的数据
    (1)需要一个“员工档案”的表单,这样每个文档都代表着一个员工。
    (2)在 Elasticsearch 中,存储数据的行为就叫做 索引(indexing) ,但是在我们索引数据前,我们需要决定将数据存储在哪里。

  2. 索引 , 类型 ,文档 ,字段
    文档属于一种 类型(type),各种各样的类型存在于一个 索引 中。
    类比传统的关系数据库得到一些大致的相似之处:
    关系数据库 ⇒ 数据库 ⇒ 表 ⇒ 行 ⇒ 列(Columns)
    Elasticsearch ⇒ 索引 ⇒ 类型 ⇒ 文档 ⇒ 字段(Fields)

  3. 一个 Elasticsearch 集群可以包含多个 索引(数据库),也就是说其中包含了很多 类型(表)。这些类型中包含了很多的 文档(行),然后每个文档中又包含了很多的 字段(列)。

三种索引的含义

索引(名词)

一个 索引 就类似于传统关系型数据库中的 数据库。这里就是存储相关文档的的地方。

索引 (动词)

为一个文档创建索引 是把一个文档存储到一个索引(名词)中的过程,这样它才能被检索。这个过程非常类似于 SQL 中的 INSERT 命令,如果已经存在文档,新的文档将会覆盖旧的文档。

反向索引

在关系数据库中的某列添加一个 索引,比如多路搜索树(B-Tree)索引,就可以加速数据的取回速度, Elasticsearch 以及 Lucene 使用的是一个叫做 反向索引(inverted index) 的结构来实现相同的功能。

每个文档中的字段都被创建了索引(拥有一个反向索引),因此他们可以被搜索。如果一个字段缺失了反向索引的话,它将不能被搜索。

创建员工名单的操作

  1. 为每一个员工的 文档 创建索引,每个 文档 都包含了一个员工的所有信息。
  2. 每个文档都会被标记为 employee 类型。
  3. 这种类型将存活在 megacorp 这个 索引 中。
  4. 这个索引将会存储在 Elasticsearch 的集群中。

执行命令如下,即可完成以上4步操作

curl -i -XPUT 'http://localhost:9200/megacorp/employee/3?pretty' -d '
{
    "first_name" :  "Douglas",
    "last_name" :   "Fir",
    "age" :         35,
    "about":        "I like to build cabinets",
    "interests":  [ "forestry" ]
}
'

我们在操作前不需要进行任何管理操作,比如创建索引,或者为字段指定数据的类型。我们就这么直接地为一个文档创建了索引。Elasticsearch 会在创建的时候为它们设定默认值,所以所有管理操作已经在后台被默默地完成了。

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

名字 内容
megacorp 索引的名字
employee 类型的名字
1 当前员工的ID

相关文章

网友评论

      本文标题:初学ElasticSearch系列之五 索引

      本文链接:https://www.haomeiwen.com/subject/gbrvextx.html