天天看点

ES——基本原理ES——基本原理ES——集群原理

ES——基本原理

ES数据结构

index:一个数据库

type: 一张表

doucment:一个JSON

mapping:约束,注意默认约束会是text类型,这个类型会被分词导致有些数据查不出来

文档id:也可以用UUID生成,采用base64算法;这样子即可保证高可用也可以保证高效率不必理会冲突和安全问题

ES搜索过程

找到单词元信息————ES单词词典(HashMap,正排)

通过单词作为key,找到单词的数据集合value(包含了,这个单词所有文档列表以及一些重要信息)
ES——基本原理ES——基本原理ES——集群原理

找到文档所在行————ES文档集合(倒排)

文档的插入过程,将文档(文章)进行分词,分别利用哈希找到不同的词汇,并在其文档列表中添加自己的文档id

词汇本身key——词汇对象value————文档(1)、文档(2)、文档(3)……,文本内部按照出现频率排序!

ES——基本原理ES——基本原理ES——集群原理

ES数据建立

建立文章的时候,指定文章的词汇索引并统计其出现次数来实现倒排;

通过倒排索引,先搜索引区域,然后找到对应的doctID,去找到数据区域

倒排索引建立的时候使用标准化规则将关联词汇归位一个索引,词汇分析

ES索引压缩

利用数据压缩技术,让索引文件在内存中完成保存
ES——基本原理ES——基本原理ES——集群原理
ES——基本原理ES——基本原理ES——集群原理
ES——基本原理ES——基本原理ES——集群原理

ES——集群原理

Shards分片角色

node.master=true;node.data=fasle;负责管理集群范畴的变更,例如创建或删除索引,添加节点到集群或从集群删除节点;无需参与文档层面的变更和搜索+

data节点

node.master=fasle;node.data=true;持有数据和倒排索引

client節點

node.master=fasle;node.data=fasle;扮演一个负载均衡 的角色,将到来的请求路由到集群中的各个节点

在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的

Shards分片

将一个索引文件,拆分多个文件节点(索引分片),文件节点又是不同的物理机上实现高效率的分布式搜索;(默认分成5个)

Replicas副本

将每个文件节点(索引分片)分别进行冗余备份;分片又叫主索引:主管增删改;副本叫做从索引:主管查询,以及恢复数据的基础;官方建议分片节点的平方数

!!3个就是9,副本设为3

Shards分片路由算法

ES——基本原理ES——基本原理ES——集群原理

Ps:注意物理节点挂掉后,分片的虚拟节点仍然存在,因为此前的节点具有副本所以可以恢复数据到其他的物理节点上;由于文档分配在哪个虚拟节点上的是根据文档id,对分片数量求模算出来的

Shards的节点Ip定位:会根据请求中携带的参数“文档id”判断出该文档应该存储在具体哪一个shard中,然后通过元数据找到shard所在的node的ip地址

Shards分片查询需求原理

(1):客户端发送一个检索请求给node3,此时node3会创建一个空的优先级队列并且配置好分页参数from与size。

(2):node3将检所请求发送给index中的每一个shard(primary 和 replica),每一个在本地执行检索,并将结果添加到本地的优先级队列中;

(3):每个shard返回本地优先级序列中所记录的_id与score值,并发送node3。Node3将这些值合并到自己的本地的优先级队列中,并做全局的排序(node 3将它们合并成一条汇总的结果),返回给客户端。

继续阅读