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
- 单词频率 记录该单词在该文档中出现的次数
- 位置 记录单词在文档中的分词位置,用于词语搜索
- 偏移 记录单词在文档的开始和结束位置,用于高亮显示