elasticsearch是一个基于Lucene的搜索服务器,采用Java语言编写,使用Lucene构建索引、提供搜索功能,并做为Apache许可条款下的开发源码发布,是当前流行的企业级搜索引擎。其实Lucene的功能已经很强大了,为何还要画蛇添足的开发elasticsearch呢?缘由是由于Lucene只是一个由Java语言编写的库,对不适用Java语言的开发人员并不友好。因此elasticsearch在Lucene上作了不少改进,提供了多种语言的接口。Lucene之于elasticsearch堪比发动机之于汽车,elasticsearch底层使用的仍然是Lucene的api,Lucene专一于底层搜索的建设,elasticsearch专一于企业应用。elasticsearch的目标是让全文搜索变得简单,开发者能够经过简单明了的restful api轻松实现搜索功能,而没必要去面对Lucene的复杂性。node
Gateway是elasticsearch用来存储索引的文件系统,支持多种文件类型,Local FileSystem是本地的文件系统,Shared FileSystem是共享存储,也可使用Hadoop的HDFS分布式存储,也能够存储在Amazon的s3服务器上。sql
Gateway上层是一个分布式的Lucene框架,elasticsearch的底层Api是由Lucene提供的,每个elasticsearch节点上都有一个Lucene节点的支持。数据库
Lucene之上是elasticsearch的模块,包括索引模块、搜索模块、映射解析模块等。river至关于第三方插件,用于导入第三方数据源,在2.x以后已经再也不使用。编程
elasticsearch模块之上是Discovery和Scripting和第三方插件。Discovery是elasticsearch的节点发现模块,不一样机器上的elasticsearch节点要组成集群须要进行消息通讯,集群内部须要选举master节点,这些工做都是Discovery模块完成的。Scripting用来支持Python、JavaScript等多种语言的,能够在查询语句中嵌入,使用script语句性能稍低。elasticsearch也支持多种第三方插件。api
再上层是elasticsearch的传输模块和JMX。传输模块支持Thrift、Memcached、Http,默认使用HTTP传输。JMX是Java的管理框架,用来管理elasticsearch应用安全
最上层是elasticsearch提供给用户的接口,能够经过restful api和elasticsearch集群进行交互。服务器
来源:https://www.jianshu.com/p/cec1b8b3698drestful
表明一个集群,集群中有多个节点node,其中一个为主节点,这个主节点能够经过选举产生的,主节点是对于集群内部来讲的。ES的一个概念就是去中心化,字面上理解就是无中心化节点,这是对于集群外部来讲的,由于从外部来看ES集群,在逻辑上是一个总体,你与任何一个节点的通讯和整个ES集群通讯是等价的网络
一个集群就是由一个或者多个节点组织在一块儿,它们共同持有整个的数据,并在一块儿提供索引和搜索功能。一个集群由一个惟一的名字标识。一个节点只能经过指定某个集群的名字,来加入这个集群。架构
一个节点是集群中的一个服务器,做为集群的一部分,存储数据,参与集群的索引和搜索功能。一个节点也是由一个名字来标识的。默认状况下,这个名字是一个随机的漫威漫画角色的名字,这个名字会在启动的时候赋予节点,这个名字对于管理工做来讲挺重要的,由于在这个管理过程当中,要肯定网络中的哪些服务器对应于Elasticsearch集群中的哪些节点。
ES将它的数据存储在一个或多个索引(index)中。相似sql中的数据库。能够向索引中写入文档或者读取文档,并经过ES内部使用Lucene将数据索引或从索引中检索数据
一个索引就是一个拥有几分类似特征的文档的集合(相似于咱们在数据库中的库结构),一个索引由一个名字来标识,而且在咱们要对对这个索引中的文档进行索引,搜索,更新和删除的时候,都要使用到这个名字。
文档是ES中主要的实体。对全部使用ES的案例来讲,他们最终均可以终结为对文档的搜索。文档由字段构成。
全部文档写进索引以前都会先进行分析,若是将输入的文本分割为词条,哪些词条又会被过滤,这种行为叫作映射(mapping)。通常由用户本身定义规则
每一个文档都有与之对应的类型定义。这容许用户在一个索引中存储多种文档类型,并为不一样文档类型提供不一样的映射
shards表明索引分片,ES能够把一个完整的索引分红多个分片,这样的好处是能够把一个大的索引拆分红多个,分布到不一样的节点上。构成分布式搜索。分片的数量只能在索引建立前指定,而且索引建立后不能更改。
分片有两个好处,一是能够水平扩展,另外一个是能够并发提升性能。
表明索引副本,ES能够设置多个索引副本,副本的做用一是提升系统的容错性,实现高可用(HA),当某个节点某个分片损坏或丢失时能够从副本中恢复;二是提升ES的查询效率,ES会自动对搜索请求进行负载均衡。
Elasticsearch能够当作是一个数据库,只是和关系型数据库比起来数据格式和功能不同而已