https://www.songma.com/news/txtlist_i62721v.html
摘要:說明:ElasticSearch7.X很多新功能主要基於lucene8.X新特性,故對於lucene8.X新特性不贅述。7.0.0重要功能自適應分片訪問選擇在6.1中已加入這個功能,但是默認是關閉的,在7.0中開始默認開啟。若有兩個節點,且其中一個節點上有一個索引的主分片,另一個節點上有同一個索引的
說明:ElasticSearch7.X很多新功能主要基於lucene8.X新特性,故對於lucene8.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.html;https://www.songma.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 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的所有功能已經宣布完成。原來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.html; elastic/elasticsearch/issues/33160;https://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.html;https://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.html;https://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
