「日記」ElasticSearch7.x新功能介紹

說明:ElasticSearch7.X很多新功能主要基于lucene8.X新特性,故對于lucene8.X新特性不贅述。

7.0.0重要功能

自適應分片訪問選擇

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

"search idle"狀態(tài)下的分片不進行自動refresh

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

跨集群搜索引入ccs_minimize_roundtrips模式

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

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

新的集群協(xié)調實現(xiàn)

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

Elasticsearch 7重新設計了集群協(xié)調子系統(tǒng),移除了minimummasternodes設置,由集群自己選擇可以形成法定數(shù)量的節(jié)點。并且新的子系統(tǒng)可以在很短時間內(亞秒級)完成選主。?

更好支持較小的堆內存

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

跨集群復制(CCR)

在?Elasticsearch 6.5中作為beta功能引入,6.7、7.X中GA,可以用在跨機房、跨地區(qū)情況下的集群數(shù)據(jù)同步。在這個版本中加入了一些監(jiān)控的特性,解決了一些例如主從同步異常的問題。

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

索引生命周期管理

索引生命周期管理(Index Lifecycle Management)作為一個beta特性在6.6發(fā)布,在7.0GA。索引生命周期管理現(xiàn)在可以管理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.htmlhttp://www.itdecent.cn/p/94e37a5b0878?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

Elasticsearch SQL

Elasticsearch SQL可以讓用戶能夠使用SQL進行交互查詢Elasticsearch中索引數(shù)據(jù)。該功能在Elasticsearch 6.3中作為alpha版本引入,目前在Elasticsearch 6.7和7.0中也能夠生產(chǎn)使用。?通過Elasticsearch REST endpoints、Elasticsearch SQL command line interface、?JDBC driver、ODBC driver可以使用es sql。

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

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

支持納秒時間戳

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

支持TLS1.3

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

發(fā)行包中內置JDK

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

JSON格式的日志

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

更快的Top Hits檢索

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

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

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

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

Bool AND 查詢

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

Bool OR 查詢

Term 查詢,提升 40 倍左右。

Term 查詢

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

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

Rank features

Elasticsearch 7.0 中新增了兩個數(shù)據(jù)類型:rank_feature?and?rank_features。他們只作用于數(shù)值型數(shù)據(jù),且底層實現(xiàn)上可以利用上面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重要功能

關閉狀態(tài)索引也可以復制

在ElasticSearch7.2+后關閉狀態(tài)的索引也可以進行分片復制,以便于后面集群異常時可以成為主分片,或者進行數(shù)據(jù)恢復。

新增search_as_you_type數(shù)據(jù)字段

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

詳情:https://www.elastic.co/guide/en/elasticsearch/reference/7.6/search-as-you-type.html;https://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數(shù)據(jù)類型的字段??梢苑胖糜趒uery語法中,在查詢中過濾不符合范圍的時間或者距離,查詢語法中需要設置origin(即初始的時間節(jié)點或者經(jīng)緯度)。

7.3.0重要功能

只投票的主節(jié)點

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

查詢時同義詞重載

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

新的flattened數(shù)據(jù)類型

通過這個字段可以直接索引json數(shù)據(jù)。僅為整個JSON對象創(chuàng)建一個字段映射,這可以幫助防止由于大量不同的字段映射而導致映射爆炸。

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

支持向量字段的計算

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

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

如題。

別名可以通過跨集群復制進行同步

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

SQL支持frozen indices

如題。

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

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

使用異常檢測去發(fā)現(xiàn)不同尋常的數(shù)據(jù)

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

稀有Term聚合

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

7.4.0重要功能

固定結果

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

支持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

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

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

范圍字段聚合

現(xiàn)在直方圖和日期直方圖將支持范圍字段,例如用其去計算特定時間段內的電話數(shù)等。

7.5.0重要功能

SQL支持shape字段

如題。

Enrich processor

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

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

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

快照生命周期管理

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

暫??缂簭椭?/h4>

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

機器學習分類分析

分類分析是一個有監(jiān)督的機器學習算法,可以預測離散的分類值。在Es中可以進行二分類的算法執(zhí)行,即將數(shù)據(jù)分為兩個可能的類別。

詳情: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字段類型的排序優(yōu)化

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

7.7.0重要功能

Transforms

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

詳情: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




最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容