《ElasticSearch查詢》目錄導航:

 

ElasticSearch是性能優(yōu)化的分布式全文搜索引擎,存儲數(shù)據(jù)的載體是文檔(Document),它的優(yōu)勢在于搜索速度快和支持聚合操作,在更新文檔時,基本上能夠達到實時搜索。ElasticSearch引擎總是按照文檔標識來更新數(shù)據(jù),并發(fā)控制是通過順序的版本ID(version)實現(xiàn)的,控制寫-寫、寫-讀沖突,實現(xiàn)數(shù)據(jù)弱一致性。

在ElasticSearch引擎中,索引定義了文檔的邏輯存儲,索引是由段(Segment)組成的,段不是實時更新的,這意味著,在建立索引時,一個段寫入磁盤后,就不再被更新。被刪除文檔的信息存儲在一個單獨的文件中,在搜索數(shù)據(jù)時,ElasticSearch首先從段中查詢,再從查詢結果中過濾被刪除的文檔,這意味著,段中存儲”未被刪除文檔“的密度降低。多個段可以通過段合并(Segment Merge)操作把“已刪除”的文檔將從段中物理刪除,將未刪除的文檔合并成一個新段,新段中沒有”已刪除文檔“,因此,段合并操作能夠提高索引的查找速度,但段合并是IO密集型的,需要消耗大量的IO操作。

一旦數(shù)據(jù)存儲在倒排索引中,就不能被修改,因此,更新文檔是一項復雜的任務。在內(nèi)部,ElasticSearch引擎必須首先獲取文檔(從_source屬性中獲得數(shù)據(jù)),刪除舊的文檔,更新_source屬性,然后重新索引該文檔,使之可被搜索到,就是說,文檔更新的流程,實際上是先標記文檔被刪除,后插入新的文檔,最后將新文檔編入索引。

數(shù)據(jù)的更新,主要是通過_update端點,編寫內(nèi)嵌腳本(inline script)來實現(xiàn)。默認的腳本語言是Groovy,Groovy是內(nèi)置的腳本語言,不需要安裝,默認是禁用的,在未啟用動態(tài)腳本的結點上執(zhí)行腳本更新,ElasticSearch引擎將會拋出異常消息:

scripts of type [inline], operation [update] and lang [groovy] are disabled

延伸閱讀

學習是年輕人改變自己的最好方式-Java培訓,做最負責任的教育,學習改變命運,軟件學習,再就業(yè),大學生如何就業(yè),幫大學生找到好工作,lphotoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網(wǎng)站設計培訓,網(wǎng)站建設培訓學習是年輕人改變自己的最好方式