elasticsearch(二)基本概念

文档(Document)

  • elasticsearch 是面向文档的,文档是所有可搜索数据的最小单位
  • 文档会被序列化为 JSON 的格式,保存在 elasticsearch 中
    • JSON 对象由字段组成
    • 每个字段有对应的字段类型(字符串、数值、布尔、日期、二进制、范围类型)
  • 每个文档都有一个 Unique ID
    • 可以自动生成/自己指定

JSON 文档

  • 一篇文档包含了一系列字段。类似于数据库表中一条数据
  • JSON 格式灵活,不需要预先定义格式
    • 字段类型可以指定或者由 elasticsearch 自动推算
    • 支持数组/嵌套
  • CSV file 经过 logstash 转换,就会以 JSON 文件的格式打入 elasticsearch

文档元数据

  • 用来标注文档的相关信息
    • _index - 文档所属的索引名
    • _type - 文档所属的类型名-默认为 “_doc”
    • _id - 文档唯一 ID
    • _source - 文档的原始 JSON 数据
    • _version - 文档的版本信息
    • _score - 相关性打分

索引(index)

  • Index - 索引是文档的容器,是一类问文档的结合

    • Index 体现了逻辑空间的概念:每个索引都有自己的 Mapping 定义,用于定义包含文档的字段名和字段类型
    • Shard 体现了物理空间的概念:索引中的数据被分散在 Shard 上
  • 索引的 Mapping 与 Setting

    • Mapping 定义文档字段的类型
    • Setting 定义不同的数据分布
  • 名词:一个 elasticsearch 集群中,可以创建很多个不同的索引

  • 动词:保存一个文档到 elasticsearch 中的过程也叫索引(indexing)

倒排索引

  • 单词列表(Term Dictionary)- 记录所有文档的单词,记录单词到倒排列表的关联关系
    • 一般较大,通过 B+ 树/哈希拉链法 实现,以满足高性能的插入与查询
  • 倒排列表(Posting List)- 记录了单词对应的文档集合,由倒排索引项组成
    • 倒排索引项
      • 文档 ID
      • 词频 TF - 该单词在文档中出现的次数,用于相关性评分
      • 位置(Position)- 单词在文档中分词的位置。用于语句搜索(phrase query)
      • 偏移(offset)- 记录单词的开始结束位置,实现高亮显示
  • elasticsearch 会对 JSON 中每一个字段都建立索引,但也可以指定字段不进行建立

相关概念类比

RDBMSElasticsearch
TableIndex(Type)
RowDocument
ColumnFiled
SchemaMapping
SQLDSL

分布式特性

集群(Cluster)

  • elasticsearch 分布式架构的好处

    • 存储的水平扩容
    • 提高系统的可用性,部分节点停止服务,整个集群的服务不受影响
  • Elasticsearch 的分布式架构

    • 不同的集群通过不同名字来区分,defualt:‘elasticsearch’
    • 通过配置文件修改,或在命令行中 − E c l u s t e r . n a m e = c l u s t e r 1 -E cluster.name=cluster1 Ecluster.name=cluster1 来指定

集群状态(Cluster State)

  • 维护了一个集群所必要的信息
    • 所有节点 信息
    • 所有的索引和其相关的 Mapping 与 Setting 信息
    • 分片的路由信息
    • 只有主节点才能修改

集群状况(health)

GET _cluster/health

  • Green - 主分片与副本都正常分配
  • Yellow - 主分片全部正常分配,有副本分片未能正常分配
  • Red - 有主分片未能分配
    • 如磁盘容量超过负载

节点(node)

  • 节点是一个 elasticsearch 实例
    • 本质上就是一个 Java 进程
    • 一台机器上可以运行多个 elasticsearch 的进程,生产环境只建议一个
  • 节点名称也可以通过配置文件,或者启动的时候 − E n o d e . n a m e = n o d e 1 -E node.name=node1 Enode.name=node1 指定
  • 每个节点在启动后,都会分配到一个 UID,在data 目录下

Master-eligible nodes 和 Master Node

具有投票权的节点主节点

  • 每个节点启动后,默认就是一个 Master eligible 节点
    • 可以设置 node.master : false 来禁止
  • Master-eligible 节点可以参加选举进程,成为 Master 节点
  • 第一个节点会自动选举为 Master 节点
  • 每个节点都保存了集群的状态,只有 Master 节点才能修改集群的状态信息

Data Node & Coordinating Node

  • Date Node

    • 可以保存数据的节点
    • 负责保存分片数据,数据扩展时起到了至关重要的作用
  • Coordiating Node

    • 负责接收 Client 的请求,将请求分发带合适的节点,最终吧结果汇集到一起
    • 每个节点默认都有 Coordinating Node 的职责

Hot & Warm Node

  • 不同硬件配置的 Data Node,可以实现 Hot & Warm 架构,降低集群部署的成本
  • Hot 热数据-配置较高,warm数据-配置较低

Machine Learning Node

  • 负责跑机器学习的 Job,用来做异常检测

配置节点类型

  • 开发中一个节点可以承担多个角色
  • 生产中应该设置单一的角色的节点(dedicated node)
节点类型配置参数默认值
master-eligiblenode.mastertrue
datanode.datatrue
ingestnode.ingesttrue
coordinating onlyN/A恒为true
machine learningtode.mltrue

分片(Primary Shard & Replica Shard)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eTefzgny-1612083459487)(/Users/felix/Desktop/截屏2021-01-31 上午12.39.24.png)]

  • 主分片,用以解决数据水平扩展的问题,将数据分布到集群内的所有节点之上
    • 一个分片就是 一个运行的 Lucene 的实例
    • 主分片数在索引创建时指定,后续不允许修改,除非 Reindex
  • 副本,用以解决数据高可用的问题。分片其实是主分片的拷贝
    • 提高副本数量达到高吞吐的效果
    • 副本分片数量可以动态调整

分片的设定

  • 分片数量过小

    • 后续无法增加节点实现水平扩展
    • 单个分片数据量太大,导致数据重新分配耗时长
  • 分片数量过大

    • 影响搜索结果的相关性打分,影响统计结果的准确性
    • 单个节点过多的分片,会导致资源浪费,也会影响性能
    • 7.0 开始默认为 1 ,防止 over-sharding
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值