elasticsearch是一个高度可扩展得开源全文搜索和分析的引擎。可以快速、近实时的存储,搜索和分析大量数据。通常用作底层引擎技术,为具有复杂搜索功能和要求的程序提供支持。
用处:
• 运行网上商店,允许客户搜索产品。可以使用elasticsearch存储整个产品目录和库存,并为它们提供搜索和自动填充建议。
• 收集日志或交易数据,并且可以分析和挖掘此数据以查找趋势,统计信息,摘要或异常。可以使用logstash将收集到的数据提供给elasticsearch,然后elasticsearch可以运行搜索和聚合来挖掘需要的信息。
• 运行价格警报平台,允许精通价格的客户指定的一条规则,例如我想要购买的商品在下个月从任何供应商降价n元,我希望收到通知。这样可以刮取供应商价格,将其推入elasticsearch并使用其反响搜索功能来匹配价格变动与客户查询,并最终在发现匹配后将警报推送给客户。
• 快速调查,分析,可视化并询问有关大量数据的特定问题,数百万或数十亿条记录。可以使用elasticsearch存储数据,然后使用kibana构建自定义仪表板。
基本概念:
近实时(NRT)
elasticsearch是一个近实时的搜索平台,从索引文档到可搜索文档的时间有一点延迟,大概是一秒。
集群
集群是一个或多个节点的集合,它们共同保存整个数据,并提供跨所有节点的联合索引和搜索功能。集群由唯一名称标识,默认情况下为“elasticsearch”。这个名称很重要,因为如果节点设置为按名称加入集群,则该节点只能是集群的一部分。
注意不要在不同的环境中重用相同的集群名称,否则最终会导致节点加入到错误的集群里。例如,可以使用logging-dev,logging-test,logging-prod。
如果集群里只有一个节点,那么它是完全正常的。拥有多个独立的集群的话,每个集群都有自己唯一的名称。
节点
节点是作为集群里的单个服务器,存储数据并参与集群的索引和搜索功能。节点由名称标识,默认情况下,该名称是在启动时分配给节点的随机通用唯一标识符(UUID)。也可以自己定义所需的任何节点名称。此名称对于管理目的非常重要,可以在其中识别网络中哪些服务器与elasticsearch集群中的哪些节点相对应。
可以将节点配置为按集群名称加入特定集群。默认情况下,每个节点都设置为加入一个名为cluster的进去elasticsearch,这意味着如果在网络上启动许多节点并且假设它们可以互相发现,它们将自动形成并加入一个名为elasticsearch的集群。在单个集群中,可以拥有任意数量的节点。
索引
索引是具有相似的文档集合,例如可以为客户数据提供索引,为产品目录建立另一个索引,以及为订单数据建立另一个索引。索引由名称标识,必须全部为小写,该名称用于在对其中的文档执行索引、搜索、更新和删除操作时引用索引,在单个集群里,可以定义尽可能多的索引。
类型
在索引中,可以定义一个或多个类型,类型时索引的逻辑类别。类型定义为具有公共字段集的文档。假设运行一个博客平台,并将所有数据存储在一个索引中。在这个索引中,可以为用户数据定义一种类型,为博客数据定义另一种类型,以及为注释数据定义另一类型。
文档
文档时可以被索引的信息的基本单位。例如为单个客户提供一个文档,单个产品提供另一个文档,以及单个订单提供另一个文档。表现形式为json。
分片和副本
索引可以存储大量的数据,这些数据可能超过单个节点的硬件限制。例如十亿个文件占用磁盘空间1TB的单指标可能不适合对单个节点的磁盘或可能太慢服务仅从单个节点的搜索请求。
为了解决这个问题,elasticsearch提供细分指标,分成多个块称为分片的能力。当你创建一个索引,你可以简单的定义你想要的分片数量。每个分片本身是一个全功能的、独立的指数,可以托管在集群中的任何节点。
分片特征:
• 分片允许水平拆分或缩放内容的大小
• 分片允许分配和并行操作的碎片(可能在多个节点上)从而提高性能或吞吐量
这个机制中的碎片是分布式的以及其文件汇总到搜索请求时完全由elasticsearch管理,对用户来说是透明的。
在同一个集群网络上,故障时任何时候都可能出现的,拥有一个故障转移机制以防分片和节点因为某些原因离线或消失是非常有用的,并且被强烈推荐。elasticsearch允许创建一个或多个拷贝,索引分片进入所谓的副本或称作复制品的分片,简称副本。
副本特征:
• 副本为分片或节点失败提供了高可用性。需要注意的是,一个副本的分片不会分配在同一个节点作为原始的或主分片,副本是从主分片那里赋值过来的
• 副本允许用户扩展你的搜索量或吞吐量,因为搜索可以在所有副本上执行