ElasticSearch核心知识点

94 阅读3分钟
ES基于Lucene,提供了分布式搜索和存储引擎

1 ES基本概念

  • cluster集群:集群中包括很多节点,每个节点属于哪个集群,是通过配置来决定的

  • node节点:节点有一个随机分配的名称。默认节点会加入一个名为elasticsearch的集群

  • Document & field:一个document可以是一条消息,如一个商品分类信息、一条订单数据等。通常用json数据结构来表示。每一个document下都有多个field,每个field都是一个消息字段

  • index索引:索引中包括了一堆有类似结构的文档数据,一个index中包括多个document

  • type:每个索引中可以包括一个或多个type,比如商品index中可以有多个type : 日用商品、食品、虚拟商品等

  • shade: 分片,ES可以将一个索引中的数据分为多个shard,分布在多个机器上执行,可以提高吞吐量和性能,也可以支持横向扩展

  • replica: 备份,用来保证消息不丢失 ,也可以提高搜索操作的吞吐量和性能

    DB相比,可以将index类比为数据库,type视为数据表,document视为一行数据
      
    

2 ES如何实现分布式架构?分布式架构的原理?

ES的设计理念就是分布式索引,核心思想就是在多台机器上运行多个ES实例,组成ES集群。

ES中的索引,可以被拆分为多个shard,每个shard中都保存一部分的信息,这样可以很方便地提高效率、扩展集群。并且,每一个shard也有多个副本同步消息,当某个机器宕机之后,通过选举,可以在多个副本中选出一个作为master,从而恢复集群的正常功能。

3 ES写入数据的工作原理

客户端选择一个node发送请求过去,这个就是coordinating node,这个协调节点对document进行路由,存放到相应的node上的primary shard,然后同步到replica node。等同步完毕后,返回结果给客户端。

底层原理: 数据先写入到buffer中(查不到),每隔1s refresh到oscache中(可以被查到)。每隔5s,将数据写入到translog文件中(最多丢失5s的数据),等translog达到一定大小,或者到一定时间后,将出发commit机制: 第一步将buffer中的数据refresh到os cache中,清空buffer;将一个commit point写入磁盘文件,标识这个同步点对应的所有的segment file,同时将oscache中所有的数据同步到磁盘文件中,再清空translog日志文件,重启translog,commit完成。

4 ES查询数据的工作原理

通过doc id进行路由,找到相应的shard,进行查询(在所有的副本间进行随机轮询算法,随机选一个replica进行读取,做到读请求负载均衡)。

5 ES搜索的工作原理

客户端发送一个请求到协调节点,协调节点转发请求到所有的shard的主/副节点,每个shard将自己的搜索结果(document的id值)返回给协调节点,由协调节点进行数据的合并、排序、分页等操作,协调节点根据doc的id值取拉去实际的doc数据,返回给客户端。

6 在大量数据的前提下,如何加快ES的搜索速度

  • 增加服务器的内存,或只在ES中存储重点数据,查到重点数据之后,再去数据库中读取出完整的信息
  • 数据预热:将可能会比较热门的数据预先缓存到filesystem cache中
  • 冷热分离:热点数据和冷数据各写一个索引,防止冷数据将热数据的缓存冲刷掉