ElasticSearch基本概念及原理

2021-10-09 21:44:04 字數 1467 閱讀 6196

起源-lucene

elasticsearch主要功能

索引結構

目前使用中,大多數都是乙個index,對應乙個type,在es 6.x版本中,乙個索引只允許存在乙個_type,後續版本會刪掉這個type的概念。

settings定義不同的資料分布

索引的不同語義

索引(動詞)文件到elasticsearch的索引(名詞)中

單機儲存達到瓶頸的時候,需要通過增加機器來達到水平擴充套件的能力,同時通過路由演算法找到相應的資料。

增加分片的副本有利於提高系統的可用性,但是多副本會帶來寫入的一致性問題。

es資料分片分為 主和副 分片,主資料為權威資料。

分片是底層的基本讀寫的單元,目的是去分割巨大的索引,讓讀寫可以並行操作,多台機器共同完成。

資料的容器是分片,分片被分配到集群的各個節點裡,集群擴容或縮容的時候,會對集群節點中的分片進行遷移。

索引與分片的關係如下:

分片數不夠的時候,可以考慮新建索引,搜尋乙個有著50個分片的索引和搜尋50個每個都有乙個分片的索引完全等價,或者使用_split api來拆分索引。

可以建立索引別名來指向乙個或多個索引,相當於軟鏈結。

倒排索引一旦被寫入檔案後就具備不變性

索引更新

新增的內容寫入乙個新的倒排索引中,查詢時,每個倒排索引都輪流查詢,查詢完再對結果進行合併。

由於分段的不變性、更新、刪除等操作實際是將資料標註為刪除,記錄到單獨的位置,這種方式為標記刪除,刪除部分的資料不會釋放磁碟空間。

每秒產生乙個新分段,新段先寫入檔案系統快取,但稍後再執行flush刷盤操作,寫操作很快會執行完,一旦寫成功,就可以像其他檔案一樣被開啟和讀取了,es正是利用這種特性實現了近實時搜尋。

refresh:每秒清空一次寫緩衝,將資料寫入檔案,每次refresh會生成乙個新的lucene段,分段太多會帶來檔案控制代碼、記憶體的消耗。

每個搜尋請求,都需要輪流檢查每個段,查詢完結束之後對結果進行合併。

所以分段越多,查詢越慢,所以需要通過合併策略來優化。

合併操作中,標記為刪除的資料不會寫入新分段,當合併過程結束,舊的分段資料被刪除,標記刪除的資料才從磁碟刪除。

正排索引:從id到文件

倒排索引:從單詞到文件id

Elasticsearch 基本操作

mget elasticsearch中檢索多個文件,相對於乙個乙個的檢索,更快的方式是在乙個請求中使用multi get或者 mget api。具體應用如下 mget api引數是乙個 docs 陣列,陣列的每個節點定義乙個文件的 index type id 元資料。如果你只想檢索乙個或幾 個確定的...

elasticsearch基本操作

get search 建立索引 指定分片和副本 put lib 建立索引 put lib2 檢視索引的配置 get lib settings get lib2 settings get all settings 新增文件put方式指定id put lib user 1 新增文件,不指定id用post...

Elasticsearch 基本操作

乙個批量匯入elasticsearch 的demo 機器少的話,分片數最好是你的data節點的機器數倍數,這樣請求負載能夠均攤到每個機器上,如果機器比較多,最好保證分片數不要太多,比如最好別超過20 30個,然後根據你的資料量評估一下,盡量保證每個分片在15到20g吧 資料 vi request.j...