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 倍左右。

ElasticSearch 7.X 重要功能总结

Bool AND 查询

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

ElasticSearch 7.X 重要功能总结

Bool OR 查询

Term 查询,提升 40 倍左右。

ElasticSearch 7.X 重要功能总结

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://*.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.****.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.****.net/wjzt7322/article/details/103385560

圆形ingest processor

增加了一个新的圆形预处理,把圆形定义的几何图形转化为一个近似的规则几何,便于查询、聚合、索引等操作。图形如下:

ElasticSearch 7.X 重要功能总结

详情: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.****.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.****.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