2

ElasticSearch 基本概念

文档(Document)

ElasticSearch是面向文档的,文档是可搜索的最小单位。

好比

  • 日志文件中的日志
  • MP3播放的一首歌

文档会被序列化成JSON格式,保存在ElasticSearch中
每个文档都有一个Unique ID

  • 你可以自己制定ID
  • 或者ElasticSearch自动生成。

文档元数据

元数据用于标注文档的相关信息

  • _index: 文档所属的索引名
  • _type: 文档所属的类型名(目前版本只有一种类型_doc)
  • _id: 文档唯一ID
  • _source: 文档的原始Json串
  • _version: 文档的版本信息
  • _score: 相关性打分

clipboard.png

索引

Index是文档的容器。是一类文档的集合。

每个索引都有自己的Mapping定义,用于定义包含的文档的字段名和字段类型。

索引中的数据分散在Shard上。

clipboard.png

传统数据库与ElasticSearch对比

clipboard.png

分布式特性

  • 水平扩容
  • 高可用(部分节点停止服务,整个集群服务不受影响)

节点

  • Master Node
    修改集群状态,集群状态包括

    • 所有的节点信息
    • 所有的索引和其相关的Mapping与Setting信息
    • 分片的路由信息
  • Master-eligible Node
    每个节点启动后,默认就是一个Master-eligible Node
  • Ingest Node
    数据预处理节点,默认每个节点都启用Ingest
  • DataNode
    负责保存分片数据的节点
  • Hot Node & Warm Node
    不同硬件配置的DataNode,用来实现Hot&Warm架构,降低集群部署的成本
  • Coordinating Node
    负责接受Client的请求,将请求分发到合适的节点,最后将结果汇集在一起
  • Machine Learing Node
    负责跑机器学习的节点,用来做异常检测
  • Tribe Node
    Tribe Node可以连接到不同的集群,并且支持将这些集群当成一个单独的集群处理

节点配置

clipboard.png

分片

  • 主分片
    用于解决数据水平扩展,通过主分片,将数据分布到集群内所有节点之上。一个分片就是一个Lucene实例,主分片数在索引创建时指定,后续不允许修改,除非Reindex
  • 副本
    用于解决数据高可用的问题。分片是主分片的拷贝。
    副本分片数,可以动态调整
    增加副本数,还可以在一定程度上提高服务的可用性(读取的吞吐)

正排索引和倒排索引

  • 正排索引:文档ID到文档内容和单词的关联
  • 倒排索引:单词到文档ID的关系

clipboard.png

倒排索引核心成员

  • 单词词典
    记录所有文档的单词,记录单词到到排列表的关联关系
  • 倒排列表
    记录了单词对应的文档集合,由倒排索引项组成

    倒排索引项

    • 文档ID
    • 词频TF
      该单词在文档出现的次数,用于相关性评分
    • 位置
      单词在文档中分词的位置,用于语句搜索
    • 偏移
      记录单词的开始结束位置,实现高亮显示

如下图Elasticsearch的倒排列表

clipboard.png

分词(Analyzer)

  • Character Filters
    针对原始文本处理,例如去除html
  • Tokenizer
    按照规则切分为单词
  • Token Filter
    将切分的单词进行加工,小写,删除stopwords,增加同义词

clipboard.png


小鸡
214 声望24 粉丝

1.01的365次方=37.8