零、部分关键词 背景 描述
Lucene(鲁C恩):Elasticsearch是一个基于Apache Lucene(TM)的分布式可扩展的实时搜索和分析引擎.
Elasticsearch 在 Lucene 的基础上进行封装,实现了分布式搜索引擎。
Lucene就是个文档库
集群:
node:节点,每台计算机是一个节点
shard:主分片,用来存放数据,多分片会对数据进行切割,id 1、3、4 在分片1上,2、3在分片2上。
replica:副本分片,用来对主分片进行数据copy,实现提高查询效率。
Index:在ES 中索引有三层含义
document: 文档
面向文档的数据库
实时分析的分布式搜索引擎,效率极高
可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据
反向索引又叫倒排索引,是根据文章内容中的关键字建立索引。
搜索引擎原理就是建立反向索引。
Elasticsearch 也是 Master-slave 架构,也实现了数据的分片和备份。
一、ES的基础存储概念
关系数据库 ⇒ 数据库 ⇒ 表 ⇒ 行 ⇒ 列(Columns)
Elasticsearch(非关系型数据库) ⇒ 索引(index) ⇒ 文档 (document)⇒ 字段(Fields)
使用方式和原理不一样
比如:
修改操作 的原理是覆盖且自带版本控制,这种特性导致 要重新考量使用方式,就不是传统意义上的update的直接操作了
支持跨类型检索,反推就是 需要 关系型数据库支持跨表全文检索,关系型基本上是做不到的(排除sql server 的数据分析功能,当然 它有没有都不一定)
二、ES的分布式概念
以下是在主副分片和任何副本分片上面 成功新建,索引和删除文档所需要的步骤顺序:
1、客户端向 Node 1 发送新建、索引或者删除请求。
2、节点使用文档的 _id 确定文档属于分片 0 。请求会被转发到 Node 3,因为分片 0 的主分片目前被分配在
Node 3 上。
3、Node 3 在主分片上面执行请求。如果成功了,它将请求并行转发到 Node 1 和 Node 2 的副本分片上。一旦所有的副本分片都报告成功, Node 3 将向协调节点报告成功,协调节点向客户端报告成功。
三、ES的索引概念
1、索引(名词):一个 索引 类似于传统关系数据库中的一个 数据库
2、索引(动词):索引一个文档 就是存储一个文档到一个 索引 (名词)中以便它可以被检索和查询到。这非常类似于 SQL 语句中的 INSERT 关键词,除了文档已存在时新文档会替换旧文档情况之外。
也许基于倒排索引原则,会给文档建立单独的内存索引,倒排索引主要处理 属性字段的分词
3、倒排索引:关系型数据库通过增加一个 索引 比如一个 B树(B-tree)索引 到指定的列上,以便提升数据检索速度。Elasticsearch 和 Lucene 使用了一个叫做 倒排索引 的结构来达到相同的目的。
倒排索引:
https://zhuanlan.zhihu.com/p/48429223 看倒排索引片段 深入讲解