ES核心概念


倒排索引:根据关键词,造索引

  1. 分词
    1. 把字段分词 如:小米手机 分成 小米、手机;
  2. 统计
    统计分词在在哪里出现,标记出现的位置
  3. 相关度
    当查询 如:小米智能手机
    1. 进行分词,如:小米:智能:手机;分别在倒排索引表中出现的次数 次数越多 表示相关度越高,表示最想要的结果。

速度

单核 CPU 一般大于 100GB 内存 一般大概是20-50GB 磁盘 Raid 一般 SATA3 500MB SSD 最快 一般 2GB

倒排索引(查询索引文件不需要模糊查询)

  1. 数据结构

    1. 包含这个关键词的document list
    2. 关键词在每个doc中 出现的次数 TF term frequency 词频
    3. 关键词在索引中出现的次数 IDF inverse doc frequency
    4. 关键词在当前doc中出席那的次数
    5. 每个doc的长度,越长相关度越低
    6. 包含这个关键词的所有doc的平均长度
  2. Lucene
    jar包, 帮我们创建倒排索引,提供了复杂的API
    如果用Lucene做集群实现搜索,会有哪些问题

    1. 节点一旦宕机,数据丢失,后果不堪设想
    2. 自己维护,麻烦(自己创建管理索引),单台节点的承载请求的能力是有限的,需要人工负载(雨露均沾)。

ES: 分布式、高性能、高可用、可伸缩、已维护 ES 不等于 搜索引擎

  1. 分布式的搜索,存储和数据分析引擎
  2. 优点
    1. 面向开发者友好,屏蔽Lucene的复杂特性,集群自动发现
    2. 自动维护数据在过个节点上的建立。
    3. 会帮我做搜索请求的负载均衡
    4. 自动维护冗余副本,保证了部分节点宕机的情况下仍然不会有任何数据丢失
    5. ES基于Lucene提供很多高级功能:符合查询,聚合分析,基于地理位置
    6. 对于大公司,可以构建几百台服务器的大型分布式集群,处理PB级别数据,对于小公司,开箱即用,门槛低上手简单。
    7. 相遇传统数据库,提供了全文检索,同义词处理,
  3. 应用领域
    1. 全文检索、高亮、搜索推荐
    2. 各大网站的用户行为日志(点击、浏览、收藏、评论)
    3. (Business Intelligence 商业智能),数据分析:数据挖掘统计。
    4. GitHub:代码托管平台,几千亿代码
    5. ELK:(Elasticsearch(数据存储)、Logstash(日志采集)、Kibana(可视化)

ES核心概念

  1. Cluster(集群):每个集群至少包含两个节点。
  2. Node:集群中的各个节点,一个节点不代表一台服务器。
  3. Filed:一个数据字段,与index和type一起,可以定位一个doc.
  4. Document:ES最小的数据单元。
  5. ype:逻辑上的数据分类。
  6. Index:一类相同或者类似的doc,比如一个员工索引,商品索引。

share 分片 (P:Primary share;R:replica share)

  1. 一个index包含多个share,默认5P,默认每个P分配一个R,P的数量在创建所以韩的时候设置,如果想修改,需要重建索引。
  2. 每个share都是一个Lucene实例,有完整的创建索引的处理请求能力。
  3. ES会自动在nodes上为我们做shared均衡。
  4. 一个doc是不可能同时存在于多个shared中的,但是可以存在于多个shared中。
  5. P和对应的R不能同时存在于同一个节点中,所以最低的可用配置是两台节点,互为主备。

不同的数据(类型。结构)不要存放在同一个index中! 数据被用来做复杂的聚合分析(耗时、耗资源),会导致查询慢。

一台机器宕机,保证其他节点数据的完整性
横向扩展 share rebalance:数据量的提升,副本(节点):QPS的提升,高可用

ES容错

  1. 第一步:master选举
    • 当master节点宕机的时候,ES会自动的在剩余的机器中选择一个作为master节点
    • 如果是本节点当选master,票数过半后当选master,然后告诉别的节点没戏了,可以停下来,如果是别的节点当选,那么请求新的master节点加入集群。
    1. 脑裂: 可能会产生多个Master节点,配置:discovery.zen.minimum_master_nodes = N/2+1
  2. Replica容错
    • R副本提升为 P副本
  3. 尝试重启故障机
  4. 数据恢复 ,
    • 拷贝增量数据

文章作者: TheMoonLight
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 TheMoonLight !
评论
  目录