Elasticsearch-review

54 阅读2分钟

Elasticsearch 中的倒排索引是什么?

倒排索引是搜索引擎的核心

传统的检索是通过文章,逐个遍历到关键词的位置。 而倒排索引是根据分词策略,形成了关键词和文章的映射关系表,一个关键词对应一个文档id列表。 有了倒排索引,可以实现O(1)时间复杂度的检索,极大的提高了检索效率。

Elasticsearch 中的集群、节点、索引、文档、类型是什么?

  • 集群:是一个或多个节点(服务器)的集合
  • 结点:单个服务器
  • 索引:就像关系数据库中的“数据库”,索引可以包括一个或多个主分片,并且可以有零个或多个副本分片
  • 文档:类似于关系数据库中的一行。不同之处在于索引中的每个文档可以具有不同的结构(字段),但 是对于通用字段应该具有相同的数据类型

Elasticsearch 索引文档的流程?

首先客户端向集群发出索引文档的请求,它会选择任何一个节点,这个节点当接收到请求后会根据路由算法找到应该放的那个主分片的位置,从而索引数据,之后为了保证数据的完整性,它会将它的副本数据进行同步,同步完成后客户端就可以进行访问了

脑裂及解决

多个主结点

  1. 网络延迟较高
  2. 主结点既是master又是data结点,假死
  3. jvm内存回收

解决

  1. 默认结点配置大一点,默认是3s
  2. 角色分离
  3. jvm内存设置为内存的一半

Elasticsearch 如何实现master索引的?

  • Elasticsearch 的选主是 ZenDiscovery 模块负责的,主要包含 Ping 和 Unicast这两部分

  • 对所有可以成为master的节点(node.master: true)根据 nodeId 字典排序,每次选举每个节点都把自 己所知道节点排一次序,然后选出第一个(第 0 位)节点,暂且认为它是 master 节点

  • 如果对某个节点的投票数达到一定的值**(可以成为 master 节点数 n/2+1)并且该节点自己也选举自己**,那这个节点就是 master。否则重新选举一直到满足上述条件。

  • master 节点的职责主要包括集群、节点和索引的管理,不负责文档级别的管理;