Elasticsearch的介绍

Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎。它允许你快速和近实时地存储,搜索和分析大量数据。它通常用作为具有复杂搜索功能和要求的应用程序提供支持的基础引擎/技术。

以下是Elasticsearch可用于的几个示例用例:
1、你运行在线网上商店,你可以允许客户搜索你销售的产品。在这种情况下,你可以使用Elasticsearch存储整个产品目录和库存,并为它们提供搜索和自动完成创建。
2、你想要收集日志或事务数据,并且希望分析和挖掘此数据以查找趋势,统计信息,摘要或异常。在这种情况下,你可以使用Logstash(Elasticsearch / Logstash / Kibana堆栈的一部分)收集,聚合和解析你的数据,然后让Logstash将此数据提供给Elasticsearch。一旦数据在Elasticsearch中,您可以运行搜索和聚合来挖掘您感兴趣的任何信息。
3、你运行一个价格告警平台,允许价格精明的客户指定一个规则,如“我有兴趣购买一个特定的电子产品,如果小配件的价格低于$ X从任何供应商在下个月内通知我” 。在这种情况下,你可以收集供应商价格,将其推入Elasticsearch并使用其反向搜索(Percolator)功能将价格变动与客户查询进行匹配,并在找到匹配项后最终将警报推送给客户。
4、你有分析/商业智能需求,并希望快速调查,分析,可视化和询问大量数据(考虑数百万或数十亿的记录)的临时问题。在这种情况下,你可以使用Elasticsearch存储数据,然后使用Kibana(Elasticsearch / Logstash / Kibana堆栈的一部分)构建自定义显示板,以便可视化数据中对你非常重要的方面。此外,你可以使用Elasticsearch聚合功能对数据执行复杂的商业智能查询。

有几个概念是Elasticsearch的核心。

1、近实时(NRT)
Elasticsearch是一个接近实时的搜索平台。这意味着从索引文档到它可搜索的时间有一个轻微的延迟(通常为1秒)。

2、集群
集群是一个或多个节点(服务器)的集合,它们一起保存您的整个数据,并在所有节点上提供联合索引和搜索功能。集群由唯一名称标识,默认情况下为“elasticsearch”。此名称很重要,因为如果节点设置为通过其名称加入集群,则节点只能是集群的一部分。
确保你不要在不同的环境中重复使用相同的集群名称,否则你最终可能会加入错误的集群。例如,你可以对开发,暂存和生产集群使用logging-dev,logging-stage和logging-prod。

注意,有一个集群只有一个节点是有效的和完美的。此外,你可能还有多个独立的集群,每个集群都有自己唯一的集群名称。

3、节点
节点是作为集群一部分的单个服务器,存储你的数据,并参与集群的索引和搜索功能。就像一个集群,一个节点由一个名称标识,默认情况下是一个随机的通用唯一标识符(UUID),在启动时分配给该节点。如果不想使用默认值,可以定义任何所需的节点名称。此名称对于管理目的很重要,你希望确定网络中哪些服务器对应于Elasticsearch集群中的哪些节点。
可以将节点配置为通过集群名称加入特定集群。默认情况下,每个节点都设置为加入名为elasticsearch的集群,这意味着如果你在网络上启动多个节点,并且假设它们可以发现彼此,则它们将自动形成并加入名为elasticsearch的单个集群。
在单个集群中,你可以拥有任意数量的节点。此外,如果你的网络上当前没有其他Elasticsearch节点运行,则启动单个节点将默认形成一个名为elasticsearch的新单节点集群。

4、索引
索引是具有某些相似特征的文档的集合。例如,你可以拥有客户数据的索引,产品目录的另一个索引,以及订单数据的另一个索引。索引由名称(必须全部为小写)标识,并且此名称用于在对其中的文档执行索引,搜索,更新和删除操作时引用索引。在单个集群中,你可以根据需要定义任意数量的索引。

5、类型
类型是索引内部的逻辑分区 (category/partition) ,然而其意义完全取决于用户需求。因此,一个索引内部可定义一个或多个类型 (type) 。一般来说,类型就是为那些拥有相同的域的文档做的预定义。例如,在索引中,可以定义一个用于存储用户数据的类型,一个存储日志数据的类型,以及一个存储评论数据的类型。类比传统的关系型数据库领域来说,类型相当于 “ 表 ” 。

6、文档
文档是可以索引的信息的基本单位。例如,你可以为单个客户创建一个文档,为单个产品创建另一个文档,为单个订单创建另一个文档。此文档以JSON(JavaScript对象符号)表示,它是一种无处不在的互联网数据交换格式。在索引/类型中,你可以存储任意数量的文档。请注意,尽管文档物理上驻留在索引中,但实际上文档必须索引/分配给索引中的类型。

7、分片和复制(shards & replicas)
一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个具有10亿文档的索引占据1TB的磁盘空间,而任一节点都没有这样大的磁盘空间;或者单个节点处理搜索请求,响应太慢。
为了解决这个问题,Elasticsearch提供了将索引划分成多份的能力,这些份就叫做分片。当你创建一个索引的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以被放置到集群中的任何节点上。
分片之所以重要,主要有两方面的原因:
1、允许你水平分割/扩展你的内容容量
2、允许你在分片(潜在地,位于多个节点上)之上进行分布式的、并行的操作,进而提高性能/吞吐量
- 至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由Elasticsearch管理的,对于作为用户的你来说,这些都是透明的。
在一个网络/云的环境里,失败随时都可能发生,在某个分片/节点不知怎么的就处于离线状态,或者由于任何原因消失了,这种情况下,有一个故障转移机制是非 常有用并且是强烈推荐的。为此目的,Elasticsearch允许你创建分片的一份或多份拷贝,这些拷贝叫做复制分片,或者直接叫复制。
复制之所以重要,有两个主要原因:
1、在分片/节点失败的情况下,提供了高可用性。因为这个原因,注意到复制分片从不与原/主要(original/primary)分片置于同一节点上是非常重要的。
2、 扩展你的搜索量/吞吐量,因为搜索可以在所有的复制上并行运行
总之,每个索引可以被分成多个分片。一个索引也可以被复制0次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和 复制分片(主分片的拷贝)之别。分片和复制的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变复制的数量,但是你事后不能改变 分片的数量。
默认情况下,Elasticsearch中的每个索引被分片5个主分片和1个复制,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个复制分片(1个完全拷贝),这样的话每个索引总共就有10个分片。

你可能感兴趣的:(Elasticsearch)