7.10 中的新功能

以下是 Elasticsearch 7.10 中新增和改进的亮点!有关此版本的详细信息,请参阅 发行说明和 重大更改。

其他版本: 7.9 | 7.8 | 7.7 | 7.6 | 7.5 | 7.4 | 7.3 | 7.2 | 7.1 | 7.0

索引速度提升

Elasticsearch 7.10 将索引速度提高了 20%。我们减少了将条目添加到事务日志所需的协调。这种减少允许更多的并发性并将事务日志缓冲区大小从8KB增加到1MB。但是,全文搜索和其他分析密集型用例的性能提升较低。索引链越重,收益越低,因此涉及许多字段、摄取管道或全文索引的索引链将看到更低的收益。

更节省空间的索引

Elasticsearch 7.10 依赖于 Apache Lucene 8.7,它引入了对存储字段的更高压缩,索引的一部分特别存储 _source. 在我们作为基准的各种数据集上,我们注意到空间减少了 0% 到 10%。此更改特别有助于跨文档具有大量冗余数据的数据集,这通常是由我们的可观察性解决方案生成的文档的情况,这些文档重复有关在每个文档上生成数据的主机的元数据。

Elasticsearch 提供了配置index.codec设置以告诉 Elasticsearch 压缩存储字段的积极程度的能力 。两者都支持值, default并且best_compression将通过此更改获得更好的压缩。

数据层

7.10 在 Elasticsearch 中引入了形式化数据层的概念。 数据层是一种简单的集成方法,让用户可以控制成本、性能和数据广度/深度的优化。在此正式化之前,许多用户使用自定义节点属性以及使用 ILM 来管理集群内数据的生命周期和位置来配置他们自己的层拓扑。

通过这种形式化,可以使用节点角色显式配置数据层(内容、热、暖和冷),并且可以使用索引级数据层分配过滤将索引配置为在特定层内 分配。当索引经历其生命周期的各个阶段时,ILM 将利用这些层 在节点之间自动迁移数据。

由数据流抽象出的新创建的索引将自动分配到该data_hot层,而独立索引将自动分配到该data_content层。具有预先存在的data角色的节点被视为所有层的一部分。

用于分类分析的 AUC ROC 评估指标

接受者操作特征曲线下面积 (AUC ROC) 是一种评估指标,自 7.3 以来已可用于异常值检测,现在可用于分类分析。AUC ROC 表示分类过程在不同预测概率阈值下的性能。将特定类别的真阳性率与在不同阈值级别组合的所有其他类别的比率进行比较以创建曲线。

数据帧分析中的自定义特征处理器

特征处理器使您能够从文档字段中提取流程特征。您可以在模型训练和模型部署中使用这些功能。自定义特征处理器提供了一种机制来创建可在搜索和摄取时使用且不占用索引空间的特征。这个过程将特征生成与生成的模型更紧密地结合在一起。结果是简化了模型管理,因为特征和模型都可以轻松地遵循相同的生命周期。

用于搜索的时间点 (PIT)

在 7.10 中,我们引入了时间点 (PIT),这是一种在搜索中保留索引状态的轻量级方法。PIT 通过使 UI 更具反应性来改善最终用户体验。

默认情况下,搜索请求在返回响应之前等待完整的结果。例如,检索最高命中和聚合的搜索仅在计算了最高命中和聚合后才返回响应。但是,聚合通常比最高命中更慢且计算成本更高。您可以发送两个单独的请求,而不是发送组合请求:一个用于热门搜索,另一个用于聚合。通过单独的搜索请求,UI 可以在热门搜索可用时立即显示它们,并在较慢的聚合请求完成后显示聚合数据。您可以使用 PIT 来确保两个搜索请求在相同的数据和索引状态上运行。

要在搜索中使用 PIT,您必须首先使用新的开放 PIT API显式创建 PIT。keep_alive如果没有后续请求延长其持续时间,PIT 将自动进行垃圾收集。

POST /my-index-000001/_pit?keep_alive=1m

API 会返回一个您可以在搜索请求中使用的 PIT ID。您还可以使用搜索请求的keep_alive参数配置延长 PIT 寿命的时间 。

POST /_search
{
    "size": 100,
    "query": {
        "match" : {
            "title" : "elasticsearch"
        }
    },
    "pit": {
	    "id":  "46ToAwMDaWR4BXV1aWQxAgZub2RlXzEAAAAAAAAAAAEBYQNpZHkFdXVpZDIrBm5vZGVfMwAAAAAAAAAAKgFjA2lkeQV1dWlkMioGbm9kZV8yAAAAAAAAAAAMAWICBXV1aWQyAAAFdXVpZDEAAQltYXRjaF9hbGw_gAAAAA==",
	    "keep_alive": "1m"
    }
}

PIT 在其keep_alive周期结束时自动关闭。您还可以使用关闭 PIT API手动关闭不再需要的 PIT。关闭 PIT 会释放维护 PIT 索引状态所需的资源。

DELETE /_pit
{
    "id" : "46ToAwMDaWR4BXV1aWQxAgZub2RlXzEAAAAAAAAAAAEBYQNpZHkFdXVpZDIrBm5vZGVfMwAAAAAAAAAAKgFjA2lkeQV1dWlkMioGbm9kZV8yAAAAAAAAAAAMAWIBBXV1aWQyAAA="
}

有关在搜索中使用 PIT 的更多信息,请参阅 使用search_afterPIT API 文档对搜索结果进行分页 。

协调节点上的请求级断路器

您现在可以使用协调节点来计算用于在请求断路器中执行部分和最终聚合减少的内存。搜索协调器在请求断路器中添加用于保存和减少分片聚合结果的内存。在任何部分或最终减少之前,将估计减少聚合所需的内存,如果超过此断路器允许的最大内存,则会抛出 CircuitBreakingException。

该大小估计为需要减少的序列化聚合大小的大约 1.5 倍。对于某些聚合,此估计可能完全不正确,但会在缩减完成后使用实际大小进行校正。如果减少成功,我们更新断路器以删除源聚合的大小,并用新减少的结果的序列化大小替换估计。

EQL:区分大小写和:运算符

在 7.10 中,我们使大多数 EQL 运算符和函数默认区分大小写。我们还添加:了一个新的不区分大小写的相等运算符。专为安全用例而设计,您可以使用:运算符在 Windows 事件日志和其他包含字母大小写混合的事件数据中搜索字符串。

GET /my-index-000001/_eql/search
{
  "query": """
    process where process.executable : "c:\\\\windows\\\\system32\\\\cmd.exe"
  """
}

有关详细信息,请参阅EQL 语法文档。

不推荐使用 REST API 访问系统索引

我们正在弃用 REST API 访问系统索引。大多数尝试访问系统索引的 REST API 请求将返回以下弃用警告:

this request accesses system indices: [.system_index_name], but in a future
major version, direct access to system indices will be prevented by default

以下 REST API 端点将访问系统索引作为其实现的一部分,并且不会返回弃用警告:

  • GET _cluster/health
  • GET /_recovery
  • GET _cluster/allocation/explain
  • GET _cluster/state
  • POST _cluster/reroute
  • GET /_stats
  • GET /_segments
  • GET /_shard_stores
  • GET _cat/[indices,aliases,health,recovery,shards,segments]

我们还添加了一个新的元数据标志来跟踪索引。Elasticsearch 会在升级期间自动将此标志添加到任何现有系统索引。

系统索引的新线程池

我们为系统索引添加了两个新的线程池:system_read和 system_write. 这些线程池可确保对 Elastic Stack 至关重要的系统索引(例如安全性或 Kibana 使用的索引)在集群处于繁重的查询或索引负载下时保持响应。

system_read是一个fixed线程池,用于管理针对系统索引的读取操作的资源。类似地,system_write是一个 fixed线程池,用于管理针对系统索引的写操作的资源。两者的最大线程数等于5 或可用处理器的一半,以较小者为准。