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