elasticsearch是一个基于lucene的搜索服务器,采用java语言编写,使用lucene构建索引、提供搜索功能,并作为apache许可条款下的开发源码发布,是当前流行的企业级搜索引擎。其实lucene的功能已经很强大了,为什么还要多此一举的开发elasticsearch呢?原因是因为lucene只是一个由java语言编写的库,对不适用java语言的开发人员并不友好。所以elasticsearch在lucene上做了很多改进,提供了多种语言的接口。lucene之于elasticsearch堪比发动机之于汽车,elasticsearch底层使用的仍然是lucene的api,lucene专注于底层搜索的建设,elasticsearch专注于企业应用。elasticsearch的目标是让全文搜索变得简单,开发者可以通过简单明了的restful api轻松实现搜索功能,而不必去面对lucene的复杂性。
gateway是elasticsearch用来存储索引的文件系统,支持多种文件类型,local filesystem是本地的文件系统,shared filesystem是共享存储,也可以使用hadoop的hdfs分布式存储,也可以存储在amazon的s3服务器上。
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也支持多种第三方插件。
再上层是elasticsearch的传输模块和jmx。传输模块支持thrift、memcached、http,默认使用http传输。jmx是java的管理框架,用来管理elasticsearch应用
最上层是elasticsearch提供给用户的接口,可以通过restful api和elasticsearch集群进行交互。
来源:https://www.jianshu.com/p/cec1b8b3698d
代表一个集群,集群中有多个节点node,其中一个为主节点,这个主节点可以通过选举产生的,主节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心化节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是一个整体,你与任何一个节点的通信和整个es集群通信是等价的
一个集群就是由一个或者多个节点组织在一起,它们共同持有整个的数据,并在一起提供索引和搜索功能。一个集群由一个唯一的名字标识。一个节点只能通过指定某个集群的名字,来加入这个集群。
一个节点是集群中的一个服务器,作为集群的一部分,存储数据,参与集群的索引和搜索功能。一个节点也是由一个名字来标识的。默认情况下,这个名字是一个随机的漫威漫画角色的名字,这个名字会在启动的时候赋予节点,这个名字对于管理工作来说挺重要的,因为在这个管理过程中,要确定网络中的哪些服务器对应于elasticsearch集群中的哪些节点。
es将它的数据存储在一个或多个索引(index)中。类似sql中的数据库。可以向索引中写入文档或者读取文档,并通过es内部使用lucene将数据索引或从索引中检索数据
一个索引就是一个拥有几分相似特征的文档的集合(类似于我们在数据库中的库结构),一个索引由一个名字来标识,并且在我们要对对这个索引中的文档进行索引,搜索,更新和删除的时候,都要使用到这个名字。
文档是es中主要的实体。对所有使用es的案例来说,他们最终都可以终结为对文档的搜索。文档由字段构成。
所有文档写进索引之前都会先进行分析,如果将输入的文本分割为词条,哪些词条又会被过滤,这种行为叫做映射(mapping)。一般由用户自己定义规则
每个文档都有与之对应的类型定义。这允许用户在一个索引中存储多种文档类型,并为不同文档类型提供不同的映射
shards代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。
分片有两个好处,一是可以水平扩展,另一个是可以并发提高性能。
代表索引副本,es可以设置多个索引副本,副本的作用一是提高系统的容错性,实现高可用(ha),当某个节点某个分片损坏或丢失时可以从副本中恢复;二是提高es的查询效率,es会自动对搜索请求进行负载均衡。
elasticsearch可以看成是一个数据库,只是和关系型数据库比起来数据格式和功能不一样而已
如对本文有疑问, 点击进行留言回复!!
去 HBase,Kylin on Parquet 性能表现如何?
如何找到Hive提交的SQL相对应的Yarn程序的applicationId
如何在 HBase Shell 命令行正常查看十六进制编码的中文?哈哈~
网友评论