ElasticSearch 7.X 重要功能總結

7.0.0重要功能

自適應分片訪問選擇

在6.1中已加入這個功能,但是默認是關閉的,在7.0中開始默認開啓。若有兩個節點,且其中一個節點上有一個索引的主分片,另一個節點上有同一個索引的副本分片,在6.X中關閉此特性時,不管每個節點狀態如何,是否在做耗時操作,如GC等,每次請求過來時,都會通過輪詢的方式訪問兩個分片其中之一;而在7.X開啓後,ES會統計每次請求耗時,根據每個節點訪問響應的耗時長度,對每個節點的訪問頻次進行自動調整。

"search idle"狀態下的分片不進行自動refresh

Elasticsearch 7.0 中若分片在30秒內無請求訪問,則分片進入"search idle"狀態。一旦進入此狀態且分片所在索引沒有明確設置refresh間隔時間的(默認每秒執行),則定時的refresh停止直到下一個訪問請求達到才進行下一次的refresh,在此期間相比原來,將明顯增強索引數據的吞吐。如果明確設置了refresh間隔時間,則仍按配置中的間隔時間進行調度執行。

跨集羣搜索引入ccs_minimize_roundtrips模式

Elasticsearch5.3中發佈了跨集羣搜索(cross-cluster search)功能,供用戶跨多個集羣進行查詢,如本地協調節點去訪問多個不同機房的ES集羣查詢日誌信息等。Elasticsearch 7.0中引入ccs_minimize_roundtrips執行模式可以減少一次請求來回的網絡開銷。

詳情:https://www.elastic.co/guide/en/elasticsearch/reference/7.x/modules-cross-cluster-search.html

新的集羣協調實現

Elasticsearch 6.x 及之前的版本使用名爲 Zen Discovery 實現,存在一些缺點,如選主時間較慢(秒級)、部分配置存在易於錯配等情況。

Elasticsearch 7重新設計了集羣協調子系統,移除了minimummasternodes設置,由集羣自己選擇可以形成法定數量的節點。並且新的子系統可以在很短時間內(亞秒級)完成選主。 

更好支持較小的堆內存

Elasticsearch 7.0新增加了一個熔斷器,更好的追蹤內存使用量,準確地根據內存用量去拒絕客戶端請求,避免節點異常;另外聚合操作返回的bucket限制爲10000以內。

跨集羣複製(CCR)

在 Elasticsearch 6.5中作爲beta功能引入,6.7、7.X中GA,可以用在跨機房、跨地區情況下的集羣數據同步。在這個版本中加入了一些監控的特性,解決了一些例如主從同步異常的問題。

詳情:https://www.elastic.co/guide/en/elasticsearch/reference/7.6/ccr-getting-started.html

索引生命週期管理

索引生命週期管理(Index Lifecycle Management)作爲一個beta特性在6.6發佈,在7.0GA。索引生命週期管理現在可以管理frozen indices,他作爲其cold階段的一部分;也可以對其管理的索引使用CCR功能。

frozen indices詳情:https://www.elastic.co/guide/en/elasticsearch/reference/7.0/frozen-indices.html

ILM詳情:https://www.cnblogs.com/sanduzxcvbnm/p/12083735.htmlhttps://www.jianshu.com/p/94e37a5b0878?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

Elasticsearch SQL

Elasticsearch SQL可以讓用戶能夠使用SQL進行交互查詢Elasticsearch中索引數據。該功能在Elasticsearch 6.3中作爲alpha版本引入,目前在Elasticsearch 6.7和7.0中也能夠生產使用。 通過Elasticsearch REST endpointsElasticsearch SQL command line interface、 JDBC driverODBC driver可以使用es sql。

功能完善的High-level REST客戶端

從Elasticsearch 7.0.0開始,High-level REST Client(HLRC)API的所有功能已經宣佈完成。原來TransportClient使用者可以計劃將TransportClient遷移到HLRC。

支持納秒時間戳

Elasticsearch 7.0.0引入了JDK8原生時間庫,可以處理納秒精度時間戳。

支持TLS1.3

JDK11可以支持TLS1.3,所以如果使用JDK11,那在es中可以選擇使用TLS1.3.另外TLS1.0被移除,使用老版本jdk的可以選擇使用TLS1.1或者1.2。

發行包中內置JDK

內置了OpenJDK,使得上手起來更加快速。

JSON格式的日誌

在日誌目錄下,我們會看到有.json拓展的日誌。這便於我們使用類似jq的工具去查看日誌,同時也在日誌中加入了許多額外結構化信息,例如node.id, cluster.uuid, type。

更快的Top Hits檢索

這是lucene8中的重要版本功能更新。在之前的版本中,查詢會計算所有命中的文檔,但是用戶經常查詢 'a' , 'the' 等詞彙,這種詞彙不會增加多少文檔得分,但迫使查詢過程爲大量的文檔進行打分。

因此,如果檢索結果只需要返回 TOP-K 的結果,而非範圍準確的命中數量,可以對此進行優化,Lucene 8 中引入了 WAND 算法來實現此特性。當檢索結果小於指定的結果總數時,該優化不會生效。

在停止計算命中文檔總數之後,查詢 QPS 得到大幅提升,以下結果來自 lucene 官方基準測試

Bool AND 查詢,提升 2.3 倍左右。

Bool AND 查詢

Bool OR 查詢,提升 2.5 倍左右。

Bool OR 查詢

Term 查詢,提升 40 倍左右。

Term 查詢

在 Elasticsearch 7中,要在查詢中返回 TOP-K 的結果,通過 tracktotalhits 參數來指定,默認值爲10000,根據自己的需要設置返回前 K 個命中結果,或者設置爲 true,返回全部命中結果數量。

計算 TOP-K 的過程中需要評估文檔的最大得分,這需要在索引過程中寫入一些額外的信息。Lucene 將詞典劃分一個個的 block,並構建了一個跳躍表,在查詢的時候跳過不匹配的文檔,現在,索引過程中會爲每個塊中最高影響(impacts)的摘要添加到該跳錶中,可以計算出該塊可能產生的最大得分,如果該得分不具有競爭力,則可以跳過它。更多信息可以閱讀此處

Rank features

Elasticsearch 7.0 中新增了兩個數據類型:rank_feature and rank_features。他們只作用於數值型數據,且底層實現上可以利用上面top hits的特性。故可以看作是function score簡化出的一個功能,利用他們可以對排序打分進行干預且查詢效率更快。更多可以看以下詳情:https://www.elastic.co/cn/blog/easier-relevance-tuning-elasticsearch-7-0

script score query

別名function score2。拓展性更佳,可以支持多種腳本語言及java插件,function score原有功能也都可以支持。詳情:https://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-script-score-query.html

7.2.0重要功能

關閉狀態索引也可以複製

在ElasticSearch7.2+後關閉狀態的索引也可以進行分片複製,以便於後面集羣異常時可以成爲主分片,或者進行數據恢復。

新增search_as_you_type數據字段

可以作於搜索聯想功能,用戶輸入部分查詢詞後,返回聯想詞列表。與Completion suggester和Context Suggester功能大部分重複,但兩者有不同的底層實現,search_as_you_type可以利用到最新top hits的特性,而suggester底層使用FST數據結構。之所以重新開發了一個數據字段,原因歸結爲:新數據字段更有利於佔用更少的內存開銷;新數據字段功能拓展性更加,可以用在普通的query語句中,結合其他filter等語法。

詳情:https://www.elastic.co/guide/en/elasticsearch/reference/7.6/search-as-you-type.htmlhttps://github.com/elastic/elasticsearch/issues/33160https://stackoverflow.com/questions/42127894/whats-the-difference-between-search-as-you-type-and-context-suggester

distance_feature 字段查詢

只能作用於date, date_nanos, 及 geo_point數據類型的字段。可以放置於query語法中,在查詢中過濾不符合範圍的時間或者距離,查詢語法中需要設置origin(即初始的時間節點或者經緯度)。

7.3.0重要功能

只投票的主節點

一個只能在選舉時投票而不能成爲主節點的角色被引入了,這有助於高可用,且相對於主節點,這些節點只需要消耗非常少量的CPU和內存開銷。

查詢時同義詞重載

新的 Analyzer reload API 允許去修改運行時的分析器及其相應資源。例如,在之前版本中,重載同義詞需要先關閉索引,再打開索引。使用這個api就不需要再關閉索引了。

新的flattened數據類型

通過這個字段可以直接索引json數據。僅爲整個JSON對象創建一個字段映射,這可以幫助防止由於大量不同的字段映射而導致映射爆炸

詳情:https://blog.csdn.net/UbuntuTouch/article/details/103713730

支持向量字段的計算

有兩種字段類型:sparse_vector 和 dense_vector ,用於計算和查詢向量之間的餘弦相似度和點積。

間隔查詢支持前綴及模糊匹配

如題。

別名可以通過跨集羣複製進行同步

僅限於設置爲只讀的別名索引可以同步,write索引不可以同步。

SQL支持frozen indices

如題。

對於keyword字段聚合時內存消耗更加高效

在ElasticSearch6.X中,使用 Terms Aggregation會佔用更多的內存,此版本進行了優化,降低內存消耗壓力。

使用異常檢測去發現不同尋常的數據

使用無監督的異常檢測算法分析索引中每條doc的數值型字段,並在每條doc中記錄一個異常值,以比較彼此之間的異常差異。提供evaluate data frame analytics API,以獲取在算法使用期間的一些指標數據。

稀有Term聚合

它會聚合出在特定字段中很少出現的字段值。計劃使用它去替換terms aggregation中的"order" : { "_count" : "asc" }配置項。

7.4.0重要功能

固定結果

提供新接口pinned query ,可以指定排在返回結果前列的docs,適用於需要使用引導數據的場景。

支持AdoptOpenJDK 

支持AdoptOpenJDK 13,並將其打包在ES包中。

自動查詢取消

如果查詢是以_search結尾,那麼當對端連接被關閉後,查詢也會被中止。

新的shape字段

通過這個字段可以在es插入一個幾何範圍,即每條doc都是通過一串座標點定義的幾何範圍,而通過shape query結合relationship配置,可以對每條doc計算是否是包含、相交等等關係,並將符合條件的取出。

詳情:https://www.elastic.co/guide/en/elasticsearch/reference/7.x/query-dsl-shape-query.htmlhttps://blog.csdn.net/wjzt7322/article/details/103385560

圓形ingest processor

增加了一個新的圓形預處理,把圓形定義的幾何圖形轉化爲一個近似的規則幾何,便於查詢、聚合、索引等操作。圖形如下:

詳情:https://www.elastic.co/guide/en/elasticsearch/reference/7.x/ingest-circle-processor.html

範圍字段聚合

現在直方圖和日期直方圖將支持範圍字段,例如用其去計算特定時間段內的電話數等。

7.5.0重要功能

SQL支持shape字段

如題。

Enrich processor

Elasticsearch 5.x版本中引入了Ingest Node的概念(預處理節點),它使得Es在事實上具備了Logstash的部分功能,即對索引數據的預處理。

在7.5增加了一個新的ingest processor,它可以使得新數據索引時從原有其他索引中抽取字段數據豐富正在插入的doc。

詳情:https://www.felayman.com/articles/2017/11/24/1511527532643.htmlhttps://blog.csdn.net/UbuntuTouch/article/details/103400061

快照生命週期管理

新的快照生命週期管理功能,允許用戶設置定時策略去刪除老的索引。

暫停跨集羣複製

新增暫停和恢復接口,使用戶可以臨時暫停自動複製的模式

機器學習分類分析

分類分析是一個有監督的機器學習算法,可以預測離散的分類值。在Es中可以進行二分類的算法執行,即將數據分爲兩個可能的類別。

詳情:https://www.elastic.co/guide/en/machine-learning/7.x/dfa-classification.html

7.6.0重要功能

新增histogram字段類型

暫略(https://www.elastic.co/guide/en/elasticsearch/reference/7.x/histogram.html

long字段類型的排序優化

新版本lucene對這方面進行了重構,重構後也能在排序時過濾在打分上沒有競爭力的文檔(類似top hits),在查詢效率上提升至少10倍。

7.7.0重要功能

Transforms

ElasticSearch 7.2.0中引入,現在GA。Transforms and Transform APIs提供給我們一個能力,即指定索引中不同字段進行聚合,並將聚合結果索引入一個新建索引中(聚合結果中可以產生出其他新的字段,如同類型字段值的出現數量等),在這個過程中我們可以通過管理接口進行管理,每次聚合結果索引入新索引後,原索引中都會有一個checkpoint,故後面可以繼續做批量聚合。

詳情:https://www.elastic.co/guide/en/elasticsearch/reference/7.x/transforms.html

參考資料:

https://gitbook.cn/gitchat/column/5ce4ff9a308dd66813d92799/topic/5d47cfa4cb702a087ef8b77b

https://blog.csdn.net/UbuntuTouch/article/list/1

https://www.elastic.co/guide/en/elasticsearch/reference/7.x/release-highlights-7.3.0.html




轉自:https://www.jianshu.com/p/8a6855caf288
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章