0%

elasticsearch简介

elasticsearch简介

elasticsearch是基于Lucene的开源搜索引擎,虽然Lucene性能很好且功能齐全,但是非常复杂,elasticsearch使用Lucene作为核心来实现所有索引和搜索的功能,目的是通过简单地restful api来隐藏Lucene的复杂性

基本概念

文档

数据存储基本单元,文档信息能被索引,并且采用json格式传递

类型

同一个索引可被定义为多个类型,类型属于索引的逻辑分类(在6.x每个索引下只能创建一个type,在7.x直接不允许创建type,只有一个默认type)

索引

一些存在相似特征的文档集合,索引通过名称来区分,并且该名称用于关联那些为文档构建索引、查询、更新、删除操作的索引

节点

指单台服务器,也就是集群的组成单元,存储数据、参与集群的索引和搜索

集群

elasticsearch集群是一组有着相同集群名称(cluster.name)的节点集合,共享数据并提供故障转移和扩展功能,提供跨节点的索引和搜索能力

集群中节点状态有三种:绿色、黄色、红色

  • 绿色:节点状态为健康状态,所有主分片、副本分片都可以正常工作
  • 黄色:节点状态为警告状态,所有主分片都可以正常工作,但是至少有一个副本是不能正常工作的。这时集群是可以正常工作的,只是高可用在某种程度上受影响
  • 红色:集群无法正常工作。某些分片不可用

shards分片

一个索引可能存储大量的数据,这些数据可能超出了单节点的限制,为了解决这个问题,需要分而治之,这就是shards。每一个分片就是一个Lucene实例,本身就是一个完整的搜索引擎,目的是水平伸缩、并行操作、增加吞吐量

replicas副本

网络环境中,单点服务可能随时存在不可用,因此需要提供failover的机制,replicas的方式能够避免服务持续不可用,目的是高可用、提高吞吐量

层次对应

elasticsearch中的数据对应关系型数据层次对比

关系型数据库 elasticsearch
db数据库 索引indices
table表 类型type(在6.x每个索引下只能创建一个type,在7.x直接不允许创建type,只有一个默认type)
row数据行 文档Document
column字段 字段field

elasticsearch是面向文档的,文档相当于数据库中的一条记录,可以对文档进行索引、搜索、排序、过滤操作

为什么要去除type?

在一开始的时候elasticsearch的设计是借鉴了关系型数据库的,所以由type来对应关系型数据库的表,但是在真正存储的时候不同的type并没有在物理上进行分离,而是同一个索引的所有文档都是存储在相同分片的同一组文件中,一个分片就是一个Lucene索引,而类型只是作为了Lucene索引中的一个字段

倒排索引存储信息

倒排索引中存储有

  • 文档id
  • 单词频率 记录该单词在该文档中出现的次数
  • 位置 记录单词在文档中的分词位置,用于词语搜索
  • 偏移 记录单词在文档的开始和结束位置,用于高亮显示

欢迎关注我的其它发布渠道