ES学习笔记(1)- Elasticsearch核心概念和原理

ES核心概念和与原理
  1. 什么是搜索

    搜索:通过一个关键词或一段描述,得到你想要的(相关度高)结果。

  2. 如何实现搜索功能

    1. 关系型数据库:模糊查询不支持索引(索引要对字段排序 )

      性能差、不可靠、结果不准确(相关度低)

  1. 倒排索引、Lucene和全文检索

    • 倒排索引的数据结构:
      1. 包含这个关键词的document list
      2. 关键词在每个doc中出现的次数 TF term frequency
        1. 关键词在整个索引中出现 IDF inverse doc frequency
        2. 关键词在当前doc中出现的次数
        3. 每个doc的长度,越长相关度越低
        4. 包含这个关键词的所有doc的平均长度
        • Lucene: jar包,创建倒排索引,提供复杂的API
        • 如果Lucene做集群实现搜索,会有哪些问题
        1. 节点一旦宕机,数据丢失,后果不堪设想,可用性差
        2. 自己维护,需要自己创建管理索引,单台节点的承载请求的能力是有限的,需要人工做负载
  2. Elasticsearch: 分布式:分布式、高性能、高可用、可伸缩、易维护

    1. 分布式的搜索存储数据分析引擎:

    2. 优点:

      1. 面向开发者友好,屏蔽了Lucene的复杂特性,集群自动发现(cluster discovery)
      2. 自动维护数据在多个节点上的建立
      3. 会做搜索请求的负载均衡
      4. 自动维护冗余副本,保证了部分节点宕机的情况下仍然不会有任何数据丢失
      5. ES基于Lucene提供了很多高级功能:符合查询、聚合分析、基于地理位置
      6. 对于大公司,可以构建几百台服务器的大型分布式集群,处理PB级别数据;对于小公司,开箱即用,门槛低上手简单。
      7. 相比传统数据库,提供了全文检索,同义词处理,相关度排名。聚合分析以及海量数据的近实时(NTR)处理,这些传统数据库完全做不到。
    3. 应用领域:

      1. 百度(全文检索,高亮,搜索推荐)
      2. 各大网站的用户行为日志(用户点击,浏览、收藏、评论)
      3. BI(Business Intelligence 商业智能),数据分析:数据挖掘统计。
      4. Github:代码托管平台,几千亿行代码
      5. ELK(Elasticsearch(数据存储)、Logstash(日志采集)、Kibana(可视化))
    4. ES核心概念

      1. Cluster(集群):每个集群至少包含两个节点。

      2. Node:集群中的每个节点

      3. Field: 一个数据字段,与index和type一起,可以定位一个doc

      4. Document:ES最小数据单元, json格式

        例如

        1
        2
        3
        4
        5
        6
        7
        {

        "id": "1",

        "name": "test"

        }
   Type: 逻辑上的分类,可以理解为表,

   Index: 一类相同或者类似的doc,比如一个员工索引,商品索引

   Doc <=> row,  Type<=> table, index <=> DB

5. Shard 分片:数据可以分散存储,如果有一台机器宕机,可以保证其他节点数据的完整性

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