(1)Elasticsearch是一个基于Apache Lucene™的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最 先进、性能最好的、功能最全的搜索引擎库
(2)Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTful API 来隐藏Lucene的复杂性,从而让全文搜索变得简单
总之一句话,它很牛,也很复杂,但是他对外隐藏了这些内部实现,用它还是很简单滴!
到这里就有小伙伴有疑问了,不就一个搜索呀?好像用sql语句查询也可呀,为什么要用这个东西呢?
听我娓娓道来
为了方便理解,需要带入一个场景中,以下都以这个场景为主,这样更好理解!
场景:假设我们刚好在阿里BaBa工作(人还是要有梦想的,当然梦里想想就可以了),这时人力资源部门出于某种目的需要让我们创建一个员工目录,这个目录 用于促进人文关 怀和用于实时协同工作,所以它有以下不同的需求:
这些有些可以通过sql语句做到,但是很消耗时间(全文搜索),有些比较麻烦,比如高亮关键字,图表分析
然后我们来看看Elasticsearch是怎么做的呢?
我们首先要做的是存储员工数据,每个文档代表一个员工。在Elasticsearch中存储数据的行为就叫做索引(indexing),不过 在索引之前,我们需要明确数据应该存储在哪里。 在Elasticsearch中,文档归属于一种类型(type),而这些类型存在于索引(index)中,我们可以画一些简单的对比图来类比传统 关系型数据库:
Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices -> Types -> Documents -> Fields
Elasticsearch集群可以包含多个索引(indices)(数据库),每一个索引可以包含多个类型(types)(表),每一个类型包含多 个文档(documents)(行),然后每个文档包含多个字段(Fields)(列)。
记住只是类比,不能概念相等
所以为了创建员工目录,我们将进行如下操作:
实际上这些都是很容易的(尽管看起来有许多步骤)。我们能通过一个命令执行完成的操作:
(没安装Elasticsearch的Elasticsearch下载安装使用教程,,以下代码是在Kibana中执行的,下载就可以使用Kibana下载安装使用教程)
PUT /albb/employee/1
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
我们看到path: /albb/employee/1 包含三部分信息:
名字 | 说明 |
---|---|
albb | 索引名 |
employee | 类型名 |
1 | 这个员工的Id |
请求实体(JSON文档),包含了这个员工的所有信息。他的名字叫“John Smith”,25岁,喜欢攀岩。
很简单吧!它不需要你做额外的管理操作,比如创建索引或者定义每个字段的数据类型。我们能够直接索引文档, Elasticsearch已经内置所有的缺省设置,所有管理操作都是透明的。
接下来,让我们在目录中加入更多员工信息:
PUT /albb/employee/2
{
"first_name" : "Jane",
"last_name" : "Smith",
"age" : 32,
"about" : "I like to collect rock albums",
"interests": [ "music" ]
}
PUT /albb/employee/3
{
"first_name" : "Douglas",
"last_name" : "Fir",
"age" : 35,
"about": "I like to build cabinets",
"interests": [ "forestry" ]
}
好了,现在我们终于有了一些数据,可以以此开始学习搜索了,是不是很简单呢?
写作不易,你们的支持我继续创作的动力!喜欢的话给我点个赞,关注一波吧!
下一篇 讲述如何使用这些数据进行搜索得到结果
elasticsearch看这一篇就够了—入门(2)Elasticsearch检索文档,DSL语句查询,复杂查询,全文搜索