elasticsearch5.0.0版本新特性

10月27日ElasticStack發佈了全新的5.0.0版本,ElasticStack是一個解決方案統稱包括,Elasticsearch、Kibana、Beats、Logstash幾個主要的程序。爲了和其餘產品版本號保持一致,elasticsearch的版本也從2.4版本直接跳到5.0版本。java

升級指南:node

5.X版本的ES能夠讀取2.X版本生成的索引,因此2.X版本要遷移到5.X, 須要從新啓動完整的集羣。系統不支持1.X版本到5.X版本的升級。對1.X版本的升級須要先對1.X版本的索引進行重建。算法

系統提供了一個遷移助手插件,能夠幫助系統從2.3以上的版本遷移到5.X。
elasticsearch5.0.0主要新特性緩存

索引性能安全

因爲採用了不少新的技術,在5.0.0中的索引性能有了明顯的提升。這些新技術包括採用了新的數字類型結構,在併發更新到同一文檔中採用了新的技術減小了鎖的衝突,在同步事務日誌時減小鎖定的條件。採用了異步同步日誌機制,增長減小了磁盤尋址的時間。當依靠Elasticsearch自動生成文檔ID時採用了採用了基於時間的用戶實例增長了比較大的效率。支持實時文檔內部更改的獲取,能夠增長更多的可用內存用於索引緩衝區,同時在垃圾收集中花費更少的時間。一般狀況,能夠提升25%-80%的效率。數據結構

數據轉換(Ingest Node)併發

在5.0.0中,新增了一個特性數據轉換(Ingest Nodes)。他能夠不依賴於Logstash實現經常使用的過濾能力,好比grok, split, convert, date等。它能夠用來執行常見的數據轉換和處理。可使用轉換節點在實際索引以前對文檔進行預處理。在任何轉換節點中,處理索引或者塊處理以前進行預處理轉換。能夠在任何節點開啓轉換功能,或者創建單獨的轉換節點。在默認狀況下,在任何節點都有開啓了轉換能力,若是要關閉轉換能力,須要在配置文件中添加:app

node.ingest: falseless

在索引文檔以前進行預處理,它定義了一個指定一系列處理器的管道。每一個處理器以某種方式轉換文檔。例如,你可能有一個管道,包括一個處理器,從文檔中刪除字段,而後進入另外一個處理器,對文檔中的字段進行重命名。
使用一個管道,你只需在一個索引或批量請求後加入管道參數。例如:異步

PUT my-index/my-type/my-id?pipeline=my_pipeline_id
{
  "foo": "bar"
}

在使用前,須要先定義管道,例如定義上面的管道:

PUT _ingest/pipeline/my-pipeline-id
{
  "description" : "describe pipeline",
  "processors" : [
    {
      "set" : {
        "field": "foo",
        "value": "bar"
      }
    }
  ]
}

本文由賽克 藍德(secisland)原創,轉載請標明做者和出處。

新增腳本Painless scripting

因爲外部的腳本引擎太過於強大,什麼都能作,用很差或者設置不當就會引發安全風險,基於安全和性能方面的考慮,在5.0中引入了一個新的腳本引擎Painless,顧名思義,簡單安全,無痛使用,這個腳本引擎默認是開啓的。和Groove的沙盒機制不同,Painless使用白名單來限制函數與字段的訪問,針對es的場景來進行優化,只作es數據的操做,更加輕量級,速度要快好幾倍,而且支持Java靜態類型,語法保持Groove相似,還支持Java的lambda表達式。

新的數據結構

在5.0版本中集成了Lucene 6,Lucene 6對數字類型和地理類型增長了一個新的點數據結構,叫作K-Ds樹,它改變了數字類型的索引和搜索。它增長了36%的查詢速度,增長了71%索引速度,減小了66%的硬盤空間佔用,減小了85%的內存使用。新增長的IP字段支持IP4和IP6。根據Lucene 6新的LatLonPoint結構修改了地理點類型,使地理點查詢的性能增長了一倍。同時還增長了一個半精度(half_float)浮點類型(16位)和大浮點類型(scaled_float),他們使用了數據壓縮技術來減小磁盤佔用。這些新類型能夠意味着在許多狀況下,特別是在數字型數據中將顯着減小的磁盤空間。

引入新的字段類型Text/Keyword 來替換 String

之前的string類型被分紅Text和Keyword兩種類型,keyword類型的數據只能徹底匹配,適合那些不須要分詞的數據,對過濾、聚合很是友好,text固然就是全文檢索須要分詞的字段類型了。將類型分開的好處就是使用起來更加簡單清晰,之前須要設置analyzer和index,而且有不少都是自定義的分詞器,從名稱根本看不出來到底分詞沒有,用起來很麻煩。另外string類型暫時還在的,6.0會移除。

搜索和聚合

Elasticsearch提供了Aggregation緩存,若是你的數據沒有變化,ES可以直接返回上次的緩存結果,

可是有一個場景比較特殊,就是 date分組,如:from:now-30d to:now,now是一個變量,每時每刻都在變,因此query條件一直在變,這樣緩存也就是沒有利用起來。在5.0中作了改進,

首先,`now`關鍵字最終會被重寫成具體的值;

其次每一個分片會根據本身的數據的範圍來重寫查詢爲 `match_all`或者是`match_none`查詢,因此如今的查詢可以被有效的緩存,而且只有個別數據有變化的分片才須要從新計算,大大提高查詢速度。

搜索結果分頁增長了search_after特性,它有效地跳過之前返回的結果只返回下一頁的數據。移動搜索如今能夠被並行執行。默認使用BM25評分算法,替換以前的TF/IDF評分算法。

增長了Percolator type映射類型。徹底重寫了completion suggester

用戶友好性的改進

索引的改進

Elasticsearch的配置實在太多,在新的5.0版本中,對配置驗證更加嚴格,保證原子性,若是其中一項失敗,那個整個更新請求都會失敗,不會一半成功一半失敗。

新增了一個Shrink接口

在5.0以前的版本中索引的分片數是固定的,設置好了以後不能修改,若是發現分片太多或者太少,若是要修改,只能重建索引。在5.0中增長了Shrink接口,它可將分片數進行收縮成它的因數,如以前你是15個分片,你能夠收縮成5個或者3個又或者1個,那麼咱們就能夠想象成這樣一種場景,在寫入壓力很是大的收集階段,設置足夠多的索引,充分利用shard的並行寫能力,索引寫完以後收縮成更少的shard,提升查詢性能。

新增了一個Rollover接口

對於日誌類的數據通常咱們按天來對索引進行分割(數據量更大還能進一步拆分),咱們之前是在程序裏設置一個自動生成索引的模板,例如logstash中的logstash-[YYYY-MM-DD]模板,如今5.0中提供了一個更加簡單的方式:Rollover API,例如:

PUT /logs-000001 
{
  "aliases": {
    "logs_write": {}
  }
}

# Add > 1000 documents to logs-000001

POST /logs_write/_rollover 
{
  "conditions": {
    "max_age":   "7d",
    "max_docs":  1000
  }
}

從上面能夠看到,首先建立一個logs-0001的索引,它有一個別名是logs_write,而後咱們給這個logs_write建立了一個rollover規則,即這個索引文檔不超過1000個或者最多保存7天的數據,超過會自動切換別名到logs-0002,你也能夠設置索引的setting、mapping等參數,剩下的es會自動幫你處理。

新增:Depreated logging

你們在用ES的時候,其實有些接口可能以及打上了Depreated標籤,即廢棄了,在未來的某個版本中就會移除,你當前能用是由於通常廢棄的接口都不會當即移除,給足夠的時間遷移,可是也是須要知道哪些不能用了,要改應用代碼了,因此如今有了Depreated日誌,當打開這個日誌以後,你調用的接口若是已是廢棄的接口,就會記錄下日誌,那麼接下來的事情你就知道你應該怎麼作了。

新增: Cluster allocation explain接口

『誰能給我一個shard不能分配的理由』,如今有了,你們若是以前遇到過度片不能正常分配的問題,可是不知道是什麼緣由,只能嘗試手動路由或者重啓節點,可是不必定能解決,其實裏面有不少緣由,如今提供的這個explain接口就是告訴你目前爲何不能正常分配的緣由,方便你去解決。

 

彈性

5.0版本增長了不少變化,它使ES的更加的安全。分佈式模型的每一部分都已分離,重構,簡化,並使之更可靠。羣集狀態更新要等待集羣中的全部節點的確認。當主分片複製失敗的時候,主要如今等待master節點的響應。索引的據路徑如今使用UUID,而不是索引名稱,能夠避免命名衝突。

在5.0中增長了啓動檢查來來確保配置的正確性。同時引入了開發模式和生產模式兩種方式,對生產模式的檢查會更加的嚴格。系統增長了新的內存控制器,在聚合請求等過程監控內存的使用,當聚合內存有可能過大的時候則中斷查詢請求,正常狀況下,內存不足的狀況基本上不會發生。

對多用戶的狀況下,系統增長了更多的權限控制來減小普通用戶的誤操做,例如:請求超時後禁用的文本字段字段的數據加載,限制分片請求的數量,限制映射的字段數量等等。

 java RestClient客戶端

5.0裏面提供了第一個Java原生的REST客戶端SDK,相比以前的TransportClient,版本依賴簡單,集羣升級不影響,支持跨Java版本的調用等,新的基於HTTP協議的客戶端對Elasticsearch的依賴解耦,沒有jar包衝突,提供了集羣節點自動發現、日誌處理、節點請求失敗自動進行請求輪詢,充分發揮Elasticsearch的高可用能力,而且性能不相上下。

遷移助手

Elasticsearch遷移助手是一個網站的插件,它能夠幫助你從Elasticsearch 2.3.x/2.4.x版本到5.x版本的遷移,它配備了三個工具:
集羣的檢查:在您的羣集、節點和索引上運行一系列檢查,並提醒您在升級以前須要糾正的任何已知問題。
重建索引助手:在V2.0.0版本以前的索引須要從新才能夠在5.0中識別。重建索引助手經過一個按鈕升級索引。
過時接口日誌:當使用過時接口時,系統會把過時的日誌打出來,助手能夠在集羣中打開或者關閉過時日誌打印功能。

賽克藍德(secisland)後續會逐步對Elasticsearch的最新版本的各項功能進行分析,近請期待。

相關文章
相關標籤/搜索