近日,Elastic在官方博客中宣布,Elasticsearch 5.0正式發布。該版本基于Lucene 6.2.0,已經在Elastic Cloud上完成了部署。據稱,這是迄今為止最快、最安全、最易用的版本。
Elasticsearch 5.0帶來了許多增強功能和新特性,主要包括:
索引性能:得益于多項改進,其中包括更好的數值型數據結構,索引吞吐量大幅提升。根據應用場景的不同,索引吞吐量提升在25%到80%之間。Ingest節點:向Elasticsearch添加數據更簡單了。Logstash是一個強大的工具,而一些較小的用戶只需要過濾器,不需要它所提供的眾多路由選項。因此,Elastic將一些最流行的Logstash過濾器(如grok、split)直接在Elasticsearch中實現為處理器。多個處理器可以組合成一個管道,在索引時應用到文檔上。Painless腳本:Elasticsearch中很多地方用到了腳本,而出于安全考慮,腳本在默認情況下是禁用的,這令人相當失望。為此,Elastic開發了一種新的腳本語言Painless。該語言更快、更安全,而且默認是啟用的。不僅如此,它的執行速度是Groovy的4倍,而且正在變得更快。Painless已經成為默認腳本語言,而Groovy、Javascript和Python都遭到棄用。要了解有關這門新語言的更多信息,請點擊這里。新數據結構:Lucene 6帶來了一個新的Points 數據結構K-D樹,用于存儲數值型和地理位置字段,徹底改變了數值型值的索引和搜索方式。基準測試表明,Points將查詢速度提升了36%,將索引速度提升了71%,而占用的磁盤和內存空間分別減少了66%和85%(參見“在5.0中搜索數值”)。搜索和聚合:借助即時聚合,Kibana圖表生成速度顯著提升。Elastic用一年的時間對搜索API進行了重構,Elasticsearch現在可以更巧妙地執行范圍查詢,只針對已經發生變化的索引重新計算聚合,而不是針對每個查詢從頭開始重新計算。在搜索方面,默認的相關性計算已經由TF/IDF換成了更先進的BM25。補全建議程序經過了完全重寫,將已刪除的文檔也考慮了進來。更友好:Elasticsearch 5.0更安全、更易用。他們采用了“盡早提示”的方法。如果出現了問題,則新版本會及早給出提示。例如,Elasticsearch 5.0會嚴格驗證設置。如果它不能識別某項設置的值,就會給出提示和建議。不僅如此,集群和索引設置現在可以通過null進行解除。此外,還有其他的一些改進,例如,rollover和shrink API啟用了一種新的模式來管理基于時間的索引,引入新的cluster-allocation-explain API,簡化索引創建。彈性:Elasticsearch分布式模型的每一部分都被分解、重構和簡化,提升了可靠性。集群狀態更新現在會等待集群中的所有節點確認。如果一個“復制片(replica shard)”被“主片(primary)”標記為失敗,則主片會等待“主節點(master)”的響應。索引現在使用數據路徑中的UUID,而不是索引名,避免了命名沖突。另外,Elasticsearch現在進行啟動檢查,確保系統配置沒有問題。配置比較麻煩,但如果只是試用,開發人員也可以選擇localhost-only模式,避免繁瑣的配置。另外,新版本還增加了斷路器及其他一些軟限制,限制請求使用的內存大小,保護集群免受惡意用戶攻擊。此外,該版本還提供了一個底層的Java REST/HTTP客戶端,可以用于監聽、日志記錄、請求輪詢、故障節點重試等。它使用Java 7,將依賴降到了最低,比Transport客戶端的依賴沖突少。而在基準測試中,它的性能并不輸于Transport客戶端。不過,這是一個底層客戶端,目前還沒有提供任何查詢構建器或輔助器。它的輸入參數和輸出結果都是JSON。
需要注意的是,該版本引入了許多破壞性更改,好在他們提供了一個遷移輔助插件,可以幫助開發人員從Elasticsearch 2.3.x/2.4.x遷移到Elasticsearch 5.0。如果是從更早的Elasticsearch版本向最新的5.0版本遷移,則請查閱升級文檔。