天天看點

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将它們合并成一條彙總的結果),傳回給用戶端。

繼續閱讀