Elasticsearch是一个高度可伸缩的开源全文搜索和分析引擎。它容许你以近实时的方式快速存储、搜索和分析大量的数据。它一般被用做基础的技术来赋予应用程序复杂的搜索特性和需求。html
这里列举了几个Elasticsearch能够用来作的功能例子服务器
在剩余的本教程中,你将会被引导去把Elasticsearch安装好并运行起来,而且对它有一个简单的了解。使用基础的操做好比索引,搜索以及修改你的数据。当你完成这个教程的时候,你应该对Elasticsearch有了一个不错的了解,它是怎么工做的,而且咱们但愿你可以使用它构建出更加复杂精致的搜索应用来挖掘你的数据里的价值。网络
这里有一些Elasticsearch的核心概念。在一开始理解这些概念将会极大的使你的学习过程变得更加轻松。并发
Elasticsearch是一个近实时的搜索平台。这意味着当你导入一个文档并把它变成可搜索的时间仅会有轻微的延时。elasticsearch
一个集群是由一个或多个节点(服务器)组成的,经过全部的节点一块儿保存你的所有数据而且提供联合索引和搜索功能的节点集合。每一个集群有一个惟一的名称标识,默认是“elasticsearch”。这个名称很是重要,由于一个节点(Node)只有设置了这个名称才能加入集群,成为集群的一部分。ide
确保你没有在不一样的环境下重用相同的名称,不然你最终可能会将节点加入错误的集群。例如你可使用logging-dev,logging-stage和logging-prod来分别给开发,展现和生产集群命名。高并发
注意,一个集群中只有一个节点是有效的而且是很是好的。因此这样的话,你可能须要部署多个集群而且每一个集群有它们惟一的集群名称。学习
一个节点是一个单一的服务器,是你的集群的一部分,存储数据,而且参与集群的索引和搜索功能。跟集群同样,节点在启动时也会被分配一个惟一的标识名称,这个名称默认是一个随机的UUID(Universally Unique IDentifier)。若是你不想用默认的名称,你能够本身定义节点的名称。这个名称对于管理集群节点,识别哪台服务器对应集群中的哪一个节点有重要的做用。ui
一个节点能够经过配置特定的集群名称来加入特定的集群。默认状况下,每一个节点被设定加入一个名称为“elasticsearch”的集群,这意味着若是你在你的网络中启动了一些节点,而且假设它们能相互发现,它们将会自动组织并加入一个名称是“elasticsearch”的集群。日志
在一个集群中,你想启动多少节点就能够启动多少节点。此外,若是没有其它节点运行在当前网络中,只启动一个节点将默认造成一个新的名称为“elasticsearch”单节点集群。
一个索引就是含有某些类似特性的文档的集合。例如,你能够有一个用户数据的索引,一个产品目录的索引,还有其余的有规则数据的索引。一个索引被一个名称(必须都是小写)惟一标识,而且这个名称被用于索引经过文档去执行索引,搜索,更新和删除操做。
在一个集群中,你能够根据本身的需求定义任意多的索引。
警告!Type在6.0.0版本中已经不同意使用
一个类型是你的索引中的一个分类或者说是一个分区,它可让你在同一索引中存储不一样类型的文档,例如,为用户建一个类型,为博客文章建另外一个类型。如今已不可能在同一个索引中建立多个类型,而且整个类型的概念将会在将来的版本中移除。查看“映射类型的移除[https://www.elastic.co/guide/...]”了解更多。
一个文档是一个可被索引的数据的基础单元。例如,你能够给一个单独的用户建立一个文档,给单个产品建立一个文档,以及其余的单独的规则。这个文档用JSON格式表现,JSON是一种广泛的网络数据交换格式。
在一个索引或类型中,你能够根据本身的需求存储任意多的文档。注意,虽然一个文档在物理存储上属于一个索引,可是文档实际上必须指定一个在索引中的类型。
咱们在一个索引里存储的数据,潜在的状况下可能会超过单节点硬件的存储限制。例如,单个索引有上千万个文档须要占用1TB的硬盘存储空间,可是一台机器的硬盘可能没有这么大,或者是即使有这么大,可是单个节点在提供搜索服务时会响应缓慢。
为了解决这个问题,Elasticsearch提供了分片的能力,它能够将你的索引细分红多个部分。当你建立一个索引的时候,你能够简单的定义你想要的分片的数量。每一个分片自己是一个全功能的彻底独立的“索引”,它能够部署在集群中的任何节点上。
分片对于如下两个主要缘由很重要:
一个分片是如何被分配以及文档又是如何被汇集起来以应对搜索请求的,它的实现技术由Elasticsearch彻底管理,而且对用户是透明的。
在一个网络环境下或者是云环境下,故障可能会随时发生,有一个故障恢复机制是很是有用而且是高度推荐的,以防一个分片或节点不明缘由下线,或者由于一些缘由去除没有了。为了达到这个目的,Elasticsearch容许你制做分片的一个或多个拷贝放入一个叫作复制分片或短暂复制品中。
复制对于如下两个主要缘由很重要:
总结一下,每一个索引能够被切分红多个分片,一个索引能够被复制零次(就是没有复制)或屡次。一旦被复制,每一个索引将会有一些主分片(就是那些最原始不是被复制出来的分片),还有一些复制分片(就是那些经过复制主分片获得的分片)。
主分片和复制分片的数量能够在索引被建立时指定。索引被建立后,你能够随时动态修改复制分片的数量,可是不能修改主分片的数量。
默认状况下,在Elasticsearch中的每一个索引被分配5个主分片和一份拷贝,这意味着假设你的集群中至少有两个节点,你的索引将会有5个主分片和5个复制分片(每一个主分片对应一个复制分片,5个复制分片组成一个完整拷贝),总共每一个索引有10个分片。
每一个Elasticsearch分片是一个Lucene索引。在一个Lucene索引中有一个文档数量的最大值。截至LUCENE-5843,这个限制是2,147,483,519 (= Integer.MAX_VALUE - 128)个文档。你可使用_cat/shards API监控分片大小。
如今熟悉了概念以后,让咱们开始有趣的部分吧...