《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
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應用分析 2017-07-26
- 集合結合數(shù)據(jù)結構來看看(二) 2017-07-26