ES和Lucene的区别
Lucene只支持java,ES支持多种语言
Lucene飞分布式,ES支持分布式
Lucene非分布式的,索引目录只能在项目本地,ES的索引库可以跨多个服务分区存储
Lucene使用非常复杂,ES屏蔽了Lucene的使用细节,操作更方便
单体/小项目使用lucene,大项目或者分布式项目使用ES
倒排索引的定义
倒排索引源于实际应用中根据属性的值来查找记录,这种索引表中的每一项都包括一个属性值和具有该属性值的各记录地址,由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因此被称为倒排索引,带有倒排索引的文件我们称之为倒排索引文件
ElasticSearch与Solr对比
Solr利用zookeeper进行分布式管理,而ElasticSearch自身带有分布式协调管理功能
Solr支持更多格式的数据,而Elasticsearch仅支持json文件格式
Solr官方提供的功能更多,而Elasticsearch本身更注重核心功能,高级功能多有第三方插件提供
Solr在传统的搜索应用中表现好于ElasticSearch,但在处理实时搜索应用时效率明显低于ElasticSearch
ElasticSearch的设计理念
ElasticSearch设计的理念就是分布式搜索引擎,底层其实还是基于Lucene的
核心思想是在多台机器上启动多个es进程实例,组成一个es集群,然后会生成一个索引,索引可以拆分成多个shard,每个shard存储部分数据
同时这个Shard的数据还有多个备份,就是说每个shard都有一个primay Shard,负责写入数据,但是还有几个replica Shard,primary Shard写入数据之后,会将数据同步到其他几个Replica Shard上去
通过replica的方案,每个shard的数据都有多个备份,如果某个机器宕机了,还有别的数据副本在别的机器上,可以提供高可用性
es集群有多个节点,会自动选举一个节点为master节点,这个master节点其实就是做一些管理工作,比如维护索引元数据,负责切换primary Shard和replica shard身份之类的
es中存储数据的基本单元是索引
如果master节点宕机了,那么就会重新选举一个节点为master节点,如果是非master节点当寄了,那么就会由master节点,让那个宕机节点上的primary shard的身份转移到其他机器上的replica Shard,当宕机节点修复之后,重启之后,master节点就会控制将确实的replica shard分配过去,同步后续修改的数据,让集群重新恢复正常
es主从节点的情况和kafka有点区别在于,es的primaryShard和replicaShard都可用来进行读操作,但是只有primaryShard可以写入数据