0 概念
Elasticsearch是一个基于Apache Lucene™的开源搜索引擎。
lucene是一个开源搜索引擎库。使用java开发。通过RESTful-API隐藏lucene的复制性,让全文搜索变得简单。可以通过下面三点来描述它:
- 分布式的实时文件存储,每个字段都被索引,并且被搜索
- 分布式的实时分析搜索引擎
- 可以扩展到上百台服务器
一 安装
- http://www.elasticsearch.org/download/ ,从官方网站下载Elasticsearch。
- 解压和启动:./bin/elasticsearch (-d)
添加-d是后台运行 - 判断启动成功与否
curl ‘http://localhost:9200/?pretty’
返回状态为200,则表示正常运行 - 集群和节点
节点(node)是一个运行着的Elasticsearch实例。集群(cluster)是一组具有相同cluster.name的节点集合。
节点之间协同工作,共享数据,并提供故障转移和扩展功能。
cluster.name为集群的默认值,最好修改,可以防止新启动的es节点加入到同网络中的另一个集群中。
通过修改config/目录下的elasticsearch.yml文件,重启进程做到。
二 文档
应用中的对象很少只是简单的键值列表,更多时候它拥有复杂的数据结构,比如包含日期、地理位置、另一个对象或者数组。
你想将这些数据保存到由行和列组成的关系数据库中,就好像是把一个丰富,信息表现力强的对象拆散了放入一个非常大的表格中:你不得不拆散对象以适应表模式(通常一列表示一个字段),然后又不得不在查询的时候重建它们。
Elasticsearch是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。这种理解数据的方式与以往完全不同,这也是Elasticsearch能够执行复杂的全文搜索的原因之一。
三 索引
它涵盖了一些基本的概念介绍,如索引(indexing)、搜索(search)以及聚合(aggregations)。
在Elasticsearch中存储数据的行为就叫做索引(indexing),不过在索引之前,我们需要明确数据应该存储在哪里。
来看一个对比图:
Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices -> Types -> Documents -> Fields
Elasticsearch集群可以包含多个索引(indices)(数据库),每一个索引可以包含多个类型(types)(表),每一个类型包含多个文档(documents)(行),然后每个文档包含多个字段(Fields)(列)。
四 搜索
例如:检索单个员工的信息
通过执行HTTP GET请求并指出文档的“地址”——索引、类型和ID既可。根据这三部分信息,我们就可以返回原始JSON文档。
GET 检索
DELETE 删除
HEAD 检查是否存在
PUT 已存在文档会进行更新
五 聚合
Elasticsearch有一个功能叫做聚合(aggregations),它允许你在数据上生成复杂的分析统计。它很像SQL中的GROUP BY但是功能更强大。
六 分布式
Elasticsearch致力于隐藏分布式系统的复杂性。以下这些操作都是在底层自动完成的:
- 将你的文档分区到不同的容器或者分片(shards)中,它们可以存在于一个或多个节点中。
- 将分片均匀的分配到各个节点,对索引和搜索做负载均衡。
- 冗余每一个分片,防止硬件故障造成的数据丢失。
- 将集群中任意一个节点上的请求路由到相应数据所在的节点。
- 无论是增加节点,还是移除节点,分片都可以做到无缝的扩展和迁移。