Elasticsearch核心概念和原理

搜索功能

使用传统关系型数据库做搜索存在:性能差(模糊查询可能会索引失效)、不可靠、结果不准确(相关度低)等问题,为解决这类问题,可以使用ES来处理搜索请求。ES的核心是倒排索引

倒排索引 数据结构

  1. 包含这个关键词的document list
  2. 关键词在每个doc中出现的次数(词频) TF(term frequency)
  3. 关键词在整个索引中出现的次数 IDF (inverse doc frequency)
  4. 关键词在当前doc中出现的次数
  5. 每个doc的长度,越长相关度越低
  6. 包含这个关键词的所有doc的平均长度

Lucene

Lucene是一个jar包,帮我们创建倒排索引,提供复杂的API。Lucene是单点的,扩展相对复杂。

Elasticsearch

  • 基于Lucene开发的分布式的搜索,存储和数据分析引擎
  • 优点:
    1. 面向开发者友好,屏蔽了Lucene的复杂性,集群自动发现
    2. 自动维护数据在多个节点上的建立
    3. 请求负载均衡
    4. 自动维护冗余副本,部分节点宕机数据不会丢失
    5. 提供高级功能,符合查询,聚合分析,基于地理位置等
    6. 开箱即用,也可构建大型分布式集群,处理PB级数据
    7. 提供全文检索,同义词处理,相关度排名,海量数据近实时处理
  • 应用领域
    1. 百度(全文检索,高亮,搜索推荐)
    2.用户行为日志(用户点击、浏览、收藏、评论)
    3. BI (business intelligence)商业智能,数据挖掘统计
    4. ELK (Elasticsearch 数据存储 + Logstash 日志采集 + Kibana 可视化)

ES核心概念

  1. Cluster(集群):每个集群至少包含两个节点
  2. Node(节点):集群中的每个节点,一个节点不代表一台服务器
  3. Field(字段): 一个数据字段,与index和type一起,可以定位一个doc
  4. Document (文档):ES最小的数据单元 是json格式
  5. Type:逻辑上的数据分类,es 7.x中删除了type的概念
  6. Index:一类相同或者类似的doc,比如一个员工索引,商品索引

Shard分片:

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

你可能感兴趣的:(Elasticsearch核心概念和原理)