迁移到 8.0

edit

本节讨论了在将应用程序迁移到 Elasticsearch 8.0 时需要注意的更改。

参见 9.0 的新特性发行说明

重大变更

edit

Elasticsearch 8.0 中的以下更改可能会影响您的应用程序,并可能导致它们无法正常运行。 在升级到 8.0 之前,请查看这些更改并采取所述步骤以减轻影响。

集群和节点设置变更

edit

logo cloud 表示对 Elasticsearch Service 的 用户设置 的支持更改。

action.destructive_requires_name 现在默认设置为 truelogo cloud

详情
在Elasticsearch 8.0.0中,action.destructive_requires_name设置的默认值从false更改为true

之前,默认设置为false允许用户使用通配符模式删除、关闭或更改索引上的块。 为了防止意外删除恰好匹配通配符模式的索引,我们现在默认要求破坏性操作明确指定要修改的索引。

影响
要使用通配符模式进行破坏性操作,请将 action.destructive_requires_name 设置为 false,使用 https://www.elastic.co/guide/en/elasticsearch/reference/master/cluster-update-settings.html 集群设置 API。

您不能再在非冻结节点上设置xpack.searchable.snapshot.shared_cache.size

详情
您不能再在未分配data_frozen节点角色的节点上设置 xpack.searchable.snapshot.shared_cache.size。此设置为部分挂载索引的共享缓存预留磁盘空间。Elasticsearch仅将部分挂载的索引分配给具有data_frozen角色的节点。

影响
从没有data_frozen角色的节点的elasticsearch.yml中移除xpack.searchable.snapshot.shared_cache.size。在非冻结节点上指定此设置将导致启动时出错。

indices.query.bool.max_clause_count 已被弃用且无效。

详情
Elasticsearch 现在将根据搜索线程池的大小和分配给 JVM 的堆大小,使用一种启发式方法动态设置查询中允许的最大子句数。此限制的最小值为 1024,在大多数情况下会更大(例如,具有 30GB RAM 和 48 个 CPU 的节点将具有大约 27,000 的最大子句计数)。较大的堆会导致更高的值,而较大的线程池会导致更低的值。

影响
应尽可能避免使用包含许多子句的查询。 如果您之前为了适应繁重的查询而调整了这个设置, 您可能需要增加分配给Elasticsearch的内存, 或者减少搜索线程池的大小,以便为每个并发搜索提供更多内存。

在Lucene的早期版本中,您可以通过相互嵌套布尔查询来绕过此限制,但现在的限制是基于整个查询中的叶查询总数,这种解决方法将不再有效。

指定 indices.query.bool.max_clause_count 将不会有任何效果,但会生成弃用警告。为了避免这些警告,请在升级或节点重启期间从 elasticsearch.yml 中移除该设置。

indices.lifecycle.poll_interval 必须大于 1s

详情
设置 indices.lifecycle.poll_interval 过低可能会导致集群负载过高。轮询间隔现在必须至少为 1s(一秒)。

影响
elasticsearch.yml 中或通过 集群更新设置 APIindices.lifecycle.poll_interval 设置为 1s 或更大。

elasticsearch.yml 中将 indices.lifecycle.poll_interval 设置为小于 1s 会导致启动时出现错误。 Cluster update settings API 请求将 indices.lifecycle.poll_interval 设置为小于 1s 将返回错误。

除非明确禁用,文件和本地领域现在已启用。

详情
除非明确禁用,文件和本地领域现在已启用。如果明确禁用,文件和本地领域将始终保持禁用状态。

之前,文件和本地域具有以下隐含行为:

  • 如果文件和本地领域未配置,则如果配置了任何其他领域,它们将被隐式禁用。
  • 如果没有其他领域可用,因为领域要么未配置,要么未被许可证允许,或被显式禁用,则文件和本地领域将被启用,即使它们被显式禁用。

影响
要显式禁用文件或本地领域,请在elasticsearch.yml中的xpack.security.authc.realms命名空间下,将相应的file..enablednative..enabled设置为false

以下配置示例禁用了本地领域和文件领域。

xpack.security.authc.realms:

  native.realm1.enabled: false
  file.realm2.enabled: false

  ...
领域order设置现在是必需的。

详情
xpack.security.authc.realms.{type}.{name}.order 设置现在是必需的,并且必须为每个显式配置的领域指定。每个值必须是唯一的。

影响
如果不满足要求,集群将无法启动。

例如,以下配置是无效的:

xpack.security.authc.realms.kerberos.kerb1:
  keytab.path: es.keytab
  remove_realm_name: false

并且必须配置为:

xpack.security.authc.realms.kerberos.kerb1:
  order: 0
  keytab.path: es.keytab
  remove_realm_name: false
cluster.routing.allocation.disk.include_relocations 已被移除。

详情
Elasticsearch 现在在基于集群中节点的磁盘使用情况进行分配决策时,总是会考虑重新定位分片的大小。在早期版本中,您可以通过将 cluster.routing.allocation.disk.include_relocations 设置为 false 来禁用此功能。这可能会导致分配决策不佳,可能会超出水位线并需要大量额外工作来纠正。cluster.routing.allocation.disk.include_relocations 设置已被移除。

影响
移除 cluster.routing.allocation.disk.include_relocations 设置。在 elasticsearch.yml 中指定此设置将在启动时导致错误。

cluster.join.timeout 已被移除。

详情
cluster.join.timeout 设置已被移除。加入尝试不再超时。

影响
elasticsearch.yml 中移除 cluster.join.timeout

discovery.zen 设置已被移除。

详情
所有在 discovery.zen 命名空间下的设置不再被支持。它们仅在7.x版本中出于向后兼容性原因存在。这包括:

  • discovery.zen.minimum_master_nodes
  • discovery.zen.no_master_block
  • discovery.zen.hosts_provider
  • discovery.zen.publish_timeout
  • discovery.zen.commit_timeout
  • discovery.zen.publish_diff.enable
  • discovery.zen.ping.unicast.concurrent_connects
  • discovery.zen.ping.unicast.hosts.resolve_timeout
  • discovery.zen.ping.unicast.hosts
  • discovery.zen.ping_timeout
  • discovery.zen.unsafe_rolling_upgrades_enabled
  • discovery.zen.fd.connect_on_network_disconnect
  • discovery.zen.fd.ping_interval
  • discovery.zen.fd.ping_timeout
  • discovery.zen.fd.ping_retries
  • discovery.zen.fd.register_connection_listener
  • discovery.zen.join_retry_attempts
  • discovery.zen.join_retry_delay
  • discovery.zen.join_timeout
  • discovery.zen.max_pings_from_another_master
  • discovery.zen.send_leave_request
  • discovery.zen.master_election.wait_for_joins_timeout
  • discovery.zen.master_election.ignore_non_master_pings
  • discovery.zen.publish.max_pending_cluster_states
  • discovery.zen.bwc_ping_timeout

影响
elasticsearch.yml中移除discovery.zen设置。指定这些设置将在启动时导致错误。

http.content_type.required 已被移除。

详情
http.content_type.required 设置在 Elasticsearch 6.0 中已被弃用,并在 Elasticsearch 8.0 中被移除。该设置是在 Elasticsearch 5.3 中引入的,目的是为 Elasticsearch 6.0 做准备,因为在 Elasticsearch 6.0 中,HTTP 请求的内容类型自动检测已被移除。

影响
elasticsearch.yml中移除http.content_type.required设置。指定此设置将在启动时导致错误。

http.tcp_no_delay 已被移除。

详情
http.tcp_no_delay 设置在7.x版本中已被弃用,并在8.0版本中被移除。请改用 http.tcp.no_delay

影响
http.tcp_no_delay 设置替换为 http.tcp.no_delay。 在 elasticsearch.yml 中指定 http.tcp_no_delay 将 导致启动时出现错误。

network.tcp.connect_timeout 已被移除。

详情
network.tcp.connect_timeout 设置在7.x中已被弃用,并在8.0中被移除。此设置是transport.connect_timeout的备用设置。

影响
移除 network.tcp.connect_timeout 设置。 使用 transport.connect_timeout 设置来更改客户端连接的默认连接超时。在 elasticsearch.yml 中指定 network.tcp.connect_timeout 将导致启动时出现错误。

node.max_local_storage_nodes 已被移除。

详情
node.max_local_storage_nodes 设置在 7.x 中已被弃用,并在 8.0 中被移除。节点应在不同的数据路径上运行,以确保每个节点始终分配到相同的数据路径。

影响
移除 node.max_local_storage_nodes 设置。在 elasticsearch.yml 中指定此设置将在启动时导致错误。

已删除accept_default_password设置。

详情
自Elasticsearch 6.0版本发布以来,xpack.security.authc.accept_default_password设置没有任何影响,并且不再允许使用。

影响
elasticsearch.yml中移除xpack.security.authc.accept_default_password设置。 指定此设置将在启动时导致错误。

已移除roles.index.cache.*设置。

详情
xpack.security.authz.store.roles.index.cache.max_sizexpack.security.authz.store.roles.index.cache.ttl 设置已被移除。这些设置自 Elasticsearch 5.2 版本以来一直是多余的并已被弃用。

影响
elasticsearch.yml 中移除 xpack.security.authz.store.roles.index.cache.max_sizexpack.security.authz.store.roles.index.cache.ttl 设置。 指定这些设置将在启动时导致错误。

已删除transport.profiles.*.xpack.security.type设置。

详情
transport.profiles.*.xpack.security.type 设置不再受支持。 Transport Client 已被移除,所有客户端流量现在都使用 HTTP 传输。使用此设置的传输配置文件应被删除。

影响
elasticsearch.yml中移除transport.profiles.*.xpack.security.type设置。 在传输配置文件中指定此设置将在启动时导致错误。

SAML 领域设置 nameid_format 不再有默认值。

详情
在SAML中,身份提供者(IdP)可以显式配置为以特定格式发布NameID,或者配置为尝试符合服务提供者(SP)的要求。SP在其SAML认证请求的NameIDPolicy元素中声明其要求。在Elasticsearch中,nameid_format SAML领域设置控制NameIDPolicy值。

之前,nameid_format 的默认值是 urn:oasis:names:tc:SAML:2.0:nameid-format:transient。此设置创建了 需要 IdP 以 transient 格式发布 NameID 的认证请求。

默认值已被移除,这意味着Elasticsearch将默认创建不对此要求IdP的SAML身份验证请求。如果您想保留之前的行为,请将nameid_format设置为urn:oasis:names:tc:SAML:2.0:nameid-format:transient

影响
如果您当前没有显式配置nameid_format,您的身份提供者(IdP)可能会拒绝来自Elasticsearch的身份验证请求,因为这些请求没有指定NameID格式(并且您的IdP配置为期望一个格式)。这种不匹配可能导致SAML配置失效。如果您不确定您的IdP是否显式配置为使用特定的NameID格式,并且您希望保留当前行为,请尝试将nameid_format显式设置为urn:oasis:names:tc:SAML:2.0:nameid-format:transient

现在需要使用xpack.security.transport.ssl.enabled设置来配置xpack.security.transport.ssl设置。

详情
现在,如果不同时配置xpack.security.transport.ssl.enabled,则为xpack.security.transport.ssl配置任何SSL设置都会出错。

影响
如果使用其他xpack.security.transport.ssl设置,您必须显式指定xpack.security.transport.ssl.enabled设置。

如果您不想启用SSL并且当前正在使用其他 xpack.security.transport.ssl 设置,请执行以下操作之一:

  • 明确指定 xpack.security.transport.ssl.enabledfalse
  • 停止使用其他 xpack.security.transport.ssl 设置

如果您想启用SSL,请按照加密集群中节点之间的通信中的说明进行操作。作为此配置的一部分,明确指定xpack.security.transport.ssl.enabledtrue

例如,以下配置是无效的:

xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

并且必须配置为:

xpack.security.transport.ssl.enabled: true 
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

false

现在需要xpack.security.http.ssl.enabled设置来配置xpack.security.http.ssl设置。

详情
现在,如果不同时配置xpack.security.http.ssl.enabled,则为xpack.security.http.ssl配置任何SSL设置都会出错。

影响
如果使用其他xpack.security.http.ssl设置,您必须显式指定xpack.security.http.ssl.enabled设置。

如果您不想启用SSL,并且当前正在使用其他 xpack.security.http.ssl 设置,请执行以下操作之一:

  • 明确指定 xpack.security.http.ssl.enabledfalse
  • 停止使用其他 xpack.security.http.ssl 设置

如果您想启用SSL,请按照加密HTTP客户端通信中的说明进行操作。作为此配置的一部分,明确指定xpack.security.http.ssl.enabledtrue

例如,以下配置是无效的:

xpack.security.http.ssl.certificate: elasticsearch.crt
xpack.security.http.ssl.key: elasticsearch.key
xpack.security.http.ssl.certificate_authorities: [ "corporate-ca.crt" ]

并且必须配置为以下任一方式:

xpack.security.http.ssl.enabled: true 
xpack.security.http.ssl.certificate: elasticsearch.crt
xpack.security.http.ssl.key: elasticsearch.key
xpack.security.http.ssl.certificate_authorities: [ "corporate-ca.crt" ]

false

现在需要一个xpack.security.transport.ssl证书和密钥来为传输接口启用SSL。

详情
现在,如果在未通过使用xpack.security.transport.ssl.keystore.path设置或xpack.security.transport.ssl.certificatexpack.security.transport.ssl.key设置配置证书和密钥的情况下,为传输接口启用SSL,将会报错。

影响
如果 xpack.security.transport.ssl.enabled 设置为 true,请使用 xpack.security.transport.ssl.keystore.path 设置或 xpack.security.transport.ssl.certificatexpack.security.transport.ssl.key 设置提供证书和密钥。如果没有提供证书和密钥,Elasticsearch 将在启动时返回错误。

现在需要一个xpack.security.http.ssl证书和密钥来为HTTP服务器启用SSL。

详情
现在,如果在未通过使用xpack.security.http.ssl.keystore.path设置或xpack.security.http.ssl.certificatexpack.security.http.ssl.key设置配置证书和密钥的情况下为HTTP(Rest)服务器启用SSL,将会报错。

影响
如果 xpack.security.http.ssl.enabled 设置为 true,请使用 xpack.security.http.ssl.keystore.path 设置或 xpack.security.http.ssl.certificatexpack.security.http.ssl.key 设置提供证书和密钥。如果未提供证书和密钥,Elasticsearch 将在启动时返回错误。

PKCS#11 密钥库和信任库无法在 elasticsearch.yml 中配置

详情
设置 *.ssl.keystore.type*.ssl.truststore.type 不再接受 "PKCS11" 作为有效类型。 这适用于 Elasticsearch 中的所有 SSL 设置,包括

  • xpack.security.http.keystore.type
  • xpack.security.transport.keystore.type
  • xpack.security.http.truststore.type
  • xpack.security.transport.truststore.type

除了安全域的SSL设置外,还有观察者和监控。

使用PKCS#11密钥库或信任库作为JRE的默认存储不受影响。

影响
如果您在 elasticsearch.yml 文件中配置了 PKCS#11 密钥库,您必须删除该配置并切换到受支持的密钥库类型,或者将您的 PKCS#11 密钥库配置为 JRE 默认存储。

用户kibana已被kibana_system取代。

详情
kibana 用户历史上用于验证 Kibana 到 Elasticsearch 的身份。 这个用户的名称容易引起混淆,并且经常被误用来登录 Kibana。 为了减少混淆并更好地与其他内置系统账户保持一致,该用户已被重命名为 kibana_system

影响
将任何使用kibana用户的部分替换为kibana_system用户。在kibana.yml中指定kibana用户将导致启动时出现错误。

如果你的 kibana.yml 文件曾经包含:

elasticsearch.username: kibana

然后你应该更新以使用新的 kibana_system 用户:

elasticsearch.username: kibana_system

新的 kibana_system 用户不会保留之前的 kibana 用户密码。您必须为 kibana_system 用户显式设置一个密码。

已移除search.remote.*设置。

详情
在6.5中,这些设置已被弃用,取而代之的是cluster.remote。在7.x中,我们提供了将这些设置自动升级到cluster.remote对应设置的功能。在8.0.0中,这些设置已被移除。如果您的配置或集群状态中包含这些设置,Elasticsearch将拒绝启动。

影响
使用替换的 cluster.remote 设置。停止使用 search.remote.* 设置。在 elasticsearch.yml 中指定这些设置将导致启动时出错。

设置 pidfile 已被 node.pidfile 取代。

详情
为了确保所有设置都在适当的命名空间中,pidfile 设置在 Elasticsearch 7.4.0 版本中已被弃用,并在 8.0.0 版本中被移除。请改用 node.pidfile

影响
使用 node.pidfile 设置。停止使用 pidfile 设置。 在 elasticsearch.yml 中指定 pidfile 设置将导致启动时出错。

设置processors已被node.processors取代。

详情
为了确保所有设置都在适当的命名空间中,processors 设置在 Elasticsearch 7.4.0 版本中已被弃用,并在 8.0.0 版本中被移除。请改用 node.processors

影响
使用 node.processors 设置。停止使用 processors 设置。 在 elasticsearch.yml 中指定 processors 设置将导致启动时出现错误。

设置 node.processors 不能再超过可用处理器的数量。

详情
之前可以设置用于设置线程池默认大小的处理器数量超过可用处理器的数量。由于这会导致更多的上下文切换和更多的线程,但没有增加可以调度这些额外线程的物理CPU数量,因此node.processors设置现在受限于可用处理器的数量。

影响
如果指定,确保node.processors设置的值不超过可用处理器的数量。在elasticsearch.yml中将node.processors的值设置为大于可用处理器的数量,将会导致启动时出现错误。

已移除cluster.remote.connect设置。

详情
在 Elasticsearch 7.7.0 中,设置 cluster.remote.connect 已被弃用,取而代之的是设置 node.remote_cluster_client。在 Elasticsearch 8.0.0 中,设置 cluster.remote.connect 已被移除。

影响
使用 node.remote_cluster_client 设置。停止使用 cluster.remote.connect 设置。在 elasticsearch.yml 中指定 cluster.remote.connect 设置将在启动时导致错误。

已移除node.local_storage设置。

详情
在 Elasticsearch 7.8.0 中,设置 node.local_storage 已被弃用,并且从 Elasticsearch 8.0.0 开始,所有节点都需要本地存储。因此,node.local_storage 设置已被移除。

影响
停止使用node.local_storage设置。在elasticsearch.yml中指定此设置将导致启动时出错。

HTTP监控的auth.password设置已被移除。

详情
在 Elasticsearch 7.7.0 中,设置 xpack.monitoring.exporters..auth.password 已被弃用,取而代之的是设置 xpack.monitoring.exporters..auth.secure_password。 在 Elasticsearch 8.0.0 中,设置 xpack.monitoring.exporters..auth.password 已被移除。

影响
使用 xpack.monitoring.exporters..auth.secure_password 设置。停止使用 xpack.monitoring.exporters..auth.password 设置。在 elasticsearch.yml 中指定 xpack.monitoring.exporters..auth.password 设置将导致启动时出现错误。

已删除用于禁用基本许可证功能的设置。

详情
以下设置在Elasticsearch 7.8.0中已被弃用,并在Elasticsearch 8.0.0中已被移除:

  • xpack.enrich.enabled
  • xpack.flattened.enabled
  • xpack.ilm.enabled
  • xpack.monitoring.enabled
  • xpack.rollup.enabled
  • xpack.slm.enabled
  • xpack.sql.enabled
  • xpack.transform.enabled
  • xpack.vectors.enabled

这些基本许可证功能现在始终启用。

如果你已经禁用了ILM,以便可以使用另一个工具来管理Watcher索引,那么新引入的xpack.watcher.use_ilm_index_management设置可能需要设置为false。

影响
停止使用已移除的设置。在elasticsearch.yml中指定这些设置将导致启动时出现错误。

用于延迟集群恢复的设置,直到一定数量的主节点被移除。

详情
以下集群设置已被移除:

  • gateway.expected_nodes
  • gateway.expected_master_nodes
  • gateway.recover_after_nodes
  • gateway.recover_after_master_nodes

一旦大多数符合主节点资格的节点加入集群,就可以安全地恢复集群,因此等待任何额外的主节点资格节点启动并没有任何好处。

影响
停止使用已移除的设置。如果需要,可以使用 gateway.expected_data_nodesgateway.recover_after_data_nodes 来延迟 集群恢复,直到满足一定数量的数据节点。

已移除旧版角色设置。

详情
遗留角色设置:

  • node.data
  • node.ingest
  • node.master
  • node.ml
  • node.remote_cluster_client
  • node.transform
  • node.voting_only

已被移除。请改用 node.roles 设置。如果您之前在 7.13 或更高版本的集群上使用过旧版角色设置,您将在每个节点上收到一条弃用日志消息,指示 node.roles 的确切替代值。

影响
停止使用已移除的设置。在elasticsearch.yml中指定这些设置将在启动时导致错误。

系统调用过滤器设置已被移除。

详情
Elasticsearch 使用系统调用过滤器来移除其分叉另一个进程的能力。这对于缓解远程代码执行漏洞非常有用。这些系统调用过滤器默认启用,并且之前通过设置 bootstrap.system_call_filter 进行控制。从 Elasticsearch 8.0 开始,系统调用过滤器将成为必需。因此,设置 bootstrap.system_call_filter 在 Elasticsearch 7.13.0 中已被弃用,并在 Elasticsearch 8.0.0 中被移除。

影响
停止使用已移除的设置。在Elasticsearch配置中指定此设置将导致启动时出现错误。

已删除层级过滤设置。

详情
用于过滤将分片分配到特定节点集的以 ._tier 结尾的集群和索引级别设置已被移除。取而代之的是,应使用层级偏好设置,即 index.routing.allocation.include._tier_preference。被移除的设置包括:

集群级别设置:

  • cluster.routing.allocation.include._tier
  • cluster.routing.allocation.exclude._tier
  • cluster.routing.allocation.require._tier

索引设置:

  • index.routing.allocation.include._tier
  • index.routing.allocation.exclude._tier
  • index.routing.allocation.require._tier

影响
停止使用已移除的设置。在Elasticsearch配置中指定这些集群设置中的任何一个都会导致启动时出现错误。使用这些设置的任何索引在加载索引元数据时,这些设置将被归档(并且它们将无效)。

共享数据路径和每个索引数据路径设置已被弃用。

详情
Elasticsearch 使用共享数据路径作为每个索引数据路径的基路径。此功能之前与共享副本一起使用。从 7.13.0 开始,这些设置已被弃用。从 8.0 开始,只有 7.x 中创建的现有索引才能使用共享数据路径和每个索引数据路径设置。

影响
停止使用已弃用的设置。

单数据节点的水印设置已被弃用,现在仅接受true

详情
在7.14中,将cluster.routing.allocation.disk.watermark.enable_for_single_data_node 设置为false已被弃用。从8.0开始,唯一合法的值将是 true。在未来的版本中,该设置将被完全移除,其行为将与设置为true时相同。

如果希望单个数据节点集群使用旧的行为,可以通过设置 cluster.routing.allocation.disk.threshold_enabled: false来禁用基于磁盘的分配

影响
停止使用已弃用的设置。

已删除gateway.auto_import_dangling_indices设置。

详情
gateway.auto_import_dangling_indices 集群设置已被移除。 以前,您可以使用此设置来自动导入 悬空索引。然而, 自动导入悬空索引是不安全的。请改用 悬空索引API 来管理和导入悬空索引。

影响
停止使用已移除的设置。在elasticsearch.yml中指定该设置将导致启动时出现错误。

已删除listener线程池。

详情
之前,传输客户端使用线程池来确保监听器不会在网络线程上调用。传输客户端已在8.0中被移除,线程池也不再需要。

影响
从任何节点的elasticsearch.yml中移除listener线程池设置。 在elasticsearch.yml中指定listener线程池设置将导致启动时出现错误。

已删除fixed_auto_queue_size线程池类型。

详情
fixed_auto_queue_size 线程池类型,之前被标记为实验性功能,在7.x中已被弃用,并在8.0中被移除。 searchsearch_throttled 线程池现在具有 fixed 类型。

影响
无需采取行动。

多个传输设置已被替换。

详情
以下设置在7.x版本中已被弃用,并在8.0版本中被移除。每个设置都有一个在6.7版本中引入的替代设置。

  • transport.tcp.porttransport.port 取代
  • transport.tcp.compresstransport.compress 取代
  • transport.tcp.connect_timeouttransport.connect_timeout 取代
  • transport.tcp_no_delaytransport.tcp.no_delay 取代
  • transport.profiles.profile_name.tcp_no_delaytransport.profiles.profile_name.tcp.no_delay 取代
  • transport.profiles.profile_name.tcp_keep_alivetransport.profiles.profile_name.tcp.keep_alive 取代
  • transport.profiles.profile_name.reuse_addresstransport.profiles.profile_name.tcp.reuse_address 取代
  • transport.profiles.profile_name.send_buffer_sizetransport.profiles.profile_name.tcp.send_buffer_size 取代
  • transport.profiles.profile_name.receive_buffer_sizetransport.profiles.profile_name.tcp.receive_buffer_size 取代

影响
使用替换设置。停止使用已移除的设置。 在elasticsearch.yml中指定已移除的设置将导致启动时出错。

选择性传输压缩已默认启用。

详情
在8.0之前,传输压缩默认是禁用的。从8.0开始,transport.compress 默认设置为 indexing_data。此配置意味着节点之间的原始索引数据传播将会被压缩。

影响
节点间传输将在索引路径上减少。在某些情况下,CPU使用率可能会增加。

传输压缩默认使用lz4。

详情
在8.0之前,transport.compression_scheme 设置默认值为 deflate。从8.0开始,transport.compress_scheme 默认值为 lz4

在8.0之前,当cluster.remote..transport.compress被显式配置时,cluster.remote..transport.compression_scheme设置默认值为deflate。从8.0开始,cluster.remote..transport.compression_scheme将默认回退到transport.compression_scheme

影响
此配置意味着传输压缩将产生略低的压缩比,以换取较低的CPU负载。

节点级别的设置 repositories.fs.compress 已被移除。

详情
对于共享文件系统仓库("type": "fs"),节点级别的设置 repositories.fs.compress 以前可以用于为所有未指定 compress 的共享文件系统仓库启用压缩。repositories.fs.compress 设置已被移除。

影响
停止使用节点级别的repositories.fs.compress设置。请改用特定于存储库的compress设置来启用压缩。参考共享文件系统存储库设置

当启用FIPS模式时,默认的密码哈希现在是PBKDF2_STRETCH

详情
如果 xpack.security.fips_mode.enabled 为 true(参见 FIPS 140-2), xpack.security.authc.password_hashing.algorithm 的值现在默认为 pbkdf2_stretch

在早期版本中,此设置总是默认为bcrypt,并且运行时检查会阻止节点启动,除非该值被显式设置为"pbkdf2"变体。

对于未启用FIPS 140模式的集群,没有变化。

影响
此更改不应对升级的节点产生任何影响。 任何已明确配置密码哈希算法的节点将继续使用该配置值。 在Elasticsearch 6.x或Elasticsearch 7.x中未明确配置密码哈希算法的任何节点将无法启动。

The xpack.monitoring.history.duration 不会删除由 metricbeat 或 elastic agent 创建的索引

详情

在8.0之前,Elasticsearch会根据xpack.monitoring.history.duration设置内部处理所有监控索引的删除。

当使用 metricbeat 或 elastic agent >= 8.0 收集监控数据时,索引通过 ILM 策略进行管理。如果设置了该选项,策略将使用 xpack.monitoring.history.duration 作为初始保留期创建。

如果您需要为使用metricbeat收集的监控数据自定义保留设置,请直接更新.monitoring-8-ilm-policy ILM策略。

设置 xpack.monitoring.history.duration 仅适用于使用(遗留)内部收集编写的监控索引,不适用于由 metricbeat 或 agent 创建的索引。

影响
升级后,确保 .monitoring-8-ilm-policy ILM 策略与您期望的保留设置一致。

如果你仅使用metricbeat或agent来收集监控数据,你也可以移除任何自定义的xpack.monitoring.history.duration设置。

命令行工具变更

edit

如果您使用 Elasticsearch Service,请跳过此部分。Elasticsearch Service 会为您处理这些更改。

已移除elasticsearch-migrate工具。

详情
elasticsearch-migrate 工具提供了一种将文件领域用户和角色转换为本地领域的方法。自 Elasticsearch 7.2.0 起,该工具已被弃用。现在应在本地领域中直接创建用户和角色。

影响
停止使用 elasticsearch-migrate 工具。尝试使用 elasticsearch-migrate 工具将导致错误。

索引设置变更

edit
直接访问系统索引已被弃用。

详情
直接访问系统索引已被弃用,并且在未来的版本中可能会被禁止。如果您必须访问系统索引,请创建一个具有针对特定索引的索引权限的安全角色,并将allow_restricted_indices权限设置为true。有关如何将此权限添加到索引权限的信息,请参阅索引权限

影响
直接访问系统索引会导致API响应头中出现警告。如果可用,请使用Kibana或相关功能的Elasticsearch API来管理您想要访问的数据。

index.merge.policy.max_merge_at_once_explicit 已被弃用且无效。

详情
index.merge.policy.max_merge_at_once_explicit 索引设置已被弃用,并且无效。

之前,您可以指定 index.merge.policy.max_merge_at_once_explicit 来设置在强制合并或清除已删除文档时同时合并的最大段数。在 8.0 中,无论设置如何,此数量都是无限的。

影响
指定 index.merge.policy.max_merge_at_once_explicit 将不会有效果,但会生成弃用警告。

为了避免这些弃用警告,请停止使用该设置。在创建新索引时不要指定该设置,并从索引和组件模板中移除该设置。

要从现有的数据流或索引中移除设置,请使用更新索引设置 API 将设置的值指定为 null

PUT my-index-000001/_settings
{
  "index.merge.policy.max_merge_at_once_explicit": null
}
已移除index.max_adjacency_matrix_filters索引设置。

详情
index.max_adjacency_matrix_filters 索引设置已被移除。 以前,您可以使用此设置来配置 邻接矩阵聚合的最大过滤器数量。现在,indices.query.bool.max_clause_count 索引设置决定了该聚合的最大过滤器数量。

影响
停止使用index.max_adjacency_matrix_filters索引设置。

包含索引设置的请求将返回错误。如果您升级一个已经包含该设置的7.x索引的集群,Elasticsearch将归档该设置

从索引和组件模板中移除索引设置。尝试使用包含该设置的模板将会失败并返回错误。这包括自动化操作,例如ILM滚动更新操作。

已移除index.force_memory_term_dictionary设置。

详情
index.force_memory_term_dictionary 设置在7.0中作为临时措施引入,允许用户选择退出在适当情况下将术语字典保留在磁盘上的优化。此优化现在是强制性的,该设置已被移除。

影响
停止使用index.force_memory_term_dictionary索引设置。 包含此设置的请求将返回错误。

已删除index.soft_deletes.enabled设置。

详情
在7.6版本中,创建禁用软删除的索引已被弃用,并且在8.0版本中不再支持。index.soft_deletes.enabled设置不能再设置为false

影响
停止使用index.soft_deletes.enabled索引设置。将index.soft_deletes.enabled设置为false的请求将返回错误。

已移除index.translog.retention.ageindex.translog.retention.size设置。

详情
Translog 保留设置 index.translog.retention.ageindex.translog.retention.size 在 7.4 中实际上被忽略,在 7.7 中被弃用,并在 8.0 中被移除,以支持 软删除

影响
停止使用 index.translog.retention.ageindex.translog.retention.size 索引设置。包含这些设置的请求将返回错误。

Java API 变更

edit
在Java High Level REST Client中,indexlifecycle包已被重命名为ilm

详情
在高级别的REST客户端中,indexlifecycle 包已被重命名为 ilm,以匹配Elasticsearch代码中的包重命名。

影响
更新您的工作流程和应用程序,以使用ilm包代替indexlifecycle

模糊性的更改。

详情
要创建 Fuzziness 实例,请使用 fromStringfromEdits 方法,而不是接受字符串和数值的 build 方法。查询构建器上的多个模糊性设置器(例如 MatchQueryBuilder#fuzziness)现在只接受一个 Fuzziness 实例,而不是一个对象。

模糊性在解析任意数值时曾经是宽松的,会静默地将它们截断为三个允许的编辑距离之一:0、1 或 2。现在这种宽松性已被移除,当尝试使用其他值(例如,像 1.3 这样的浮点数曾经被接受但被截断为 1)构造实例时,类将抛出错误。

影响
使用可用的常量(例如 Fuzziness.ONEFuzziness.AUTO)或使用上述提到的工厂方法构建您自己的实例。仅使用允许的 Fuzziness 值。

Repository的更改。

详情
仓库不再依赖于IndexShard。为了提高可测试性,restoreShard和snapshotShard的契约已简化为Store和MappingService。

影响
无需采取行动。

JVM 选项更改

edit

如果您使用 Elasticsearch Service,请跳过此部分。Elasticsearch Service 会为您处理这些更改。

es.disk.auto_release_flood_stage_block 已被移除。

详情
如果一个节点超过了洪水阶段磁盘水位线,那么我们会向其所有索引添加一个块,以防止进一步写入,作为防止节点完全耗尽磁盘空间的最后手段。默认情况下,从7.4版本开始,当节点再次低于高水位线时,该块会自动移除,但可以通过将系统属性es.disk.auto_release_flood_stage_block设置为false来禁用此行为。此行为不再可选,并且现在不得设置此系统属性。

影响
停止使用es.disk.auto_release_flood_stage_block系统属性。 设置此系统属性将导致启动时出现错误。

es.rest.url_plus_as_space 已被移除。

详情
从版本7.4开始,URL中的+将被所有REST API功能编码为%2B。在此之前的版本中,+被视为单个空格。 在这些早期版本中,如果您的应用程序需要将+作为单个空格处理,您可以通过将系统属性es.rest.url_plus_as_space设置为true来恢复旧的行为。请注意,此行为已被弃用,并且在版本8中将不再支持将此系统属性设置为true

影响
更新您的应用程序或工作流程,以假设URL中的+被编码为%2B

es.unsafely_permit_handshake_from_incompatible_builds 已被移除。

详情
Elasticsearch 有一个检查,验证通信的对节点是否运行在相同的版本,并且因此使用相同的构建,从而使用相同的网络格式。在之前的版本中,可以通过设置系统属性 es.unsafely_permit_handshake_from_incompatible_buildstrue 来绕过此检查。现在,使用此系统属性已被禁止。

影响
停止使用es.unsafely_permit_handshake_from_incompatible_builds系统属性,并确保同一版本的所有节点运行完全相同的构建。设置此系统属性将在启动时导致错误。

日志记录更改

edit
Elasticsearch JSON 日志现在符合 ECS。

详情
Elasticsearch的JSON日志现在符合Elastic通用模式(ECS)。以前,Elasticsearch的JSON日志使用自定义模式。

影响
如果您的应用程序解析 Elasticsearch 的 JSON 日志,请更新它以支持新的 ECS 格式。

Elasticsearch 不再以纯文本形式发出弃用日志或慢日志。

详情
Elasticsearch 不再输出以下日志的纯文本版本:

  • 弃用日志
  • 索引慢日志
  • 搜索慢日志

这些日志现在仅在 JSON 中可用。

服务器日志仍然可以以JSON和纯文本格式提供。

影响
如果您的应用程序解析 Elasticsearch 的纯文本日志,请更新它以使用新的 ECS JSON 日志。

审计日志按大小滚动和存档。

详情
除了现有的每日滚动外,安全审计日志现在还会根据磁盘大小限制进行滚动。此外,滚动后的日志也会被gzip压缩。

影响
滚动审计日志文件的名称(但不包括当前日志的名称)已更改。 如果您已设置自动化工具来使用这些文件,您必须配置它们以使用新名称,并可能需要处理gzip存档而不是纯文本。Elasticsearch的Docker构建不受影响,因为它记录在stdout上,滚动操作不会执行。

映射更改

edit
在Elasticsearch 6.x及更早版本中创建的索引不受支持。

详情
Elasticsearch 8.0 可以读取在版本 7.0 或更高版本中创建的索引。在存在由 7.0 之前版本的 Elasticsearch 创建的索引的情况下,Elasticsearch 8.0 节点将无法启动。

影响
如果需要将Elasticsearch 6.x或之前创建的索引迁移到Elasticsearch 8.x,请在Elasticsearch 7.x中重新索引这些索引。

在Elasticsearch 6.x及更早版本中创建的已关闭索引不受支持。

详情
在早期版本中,即使节点包含来自比前一个主要版本更早的版本创建的索引数据,只要这些索引是关闭的,节点也会启动。现在,Elasticsearch 确保在启动时与每个索引(无论是打开还是关闭)兼容。

影响
如果需要将Elasticsearch 6.x或之前创建的已关闭索引迁移到Elasticsearch 8.x,请使用Elasticsearch 7.x重新索引这些索引。

每个字段的最大完成上下文数量现在是10。

详情
单个完成字段内的完成上下文数量已限制为10个。

影响
在一个完成字段中最多使用10个完成上下文。指定超过10个完成上下文将返回一个错误。

不再支持多字段中的多字段。

详情
之前,可以在一个多字段内定义一个多字段。 在7.3版本中,定义链式多字段已被弃用,现在不再支持。

影响
要迁移映射,所有出现在fields块中的fields实例都应该被移除,可以通过将链式的fields块扁平化为单一层级,或者在适当的情况下切换到copy_to

元数据字段 _field_namesenabled 参数已被移除。

详情
该设置在7.5版本中已被弃用,并且在新索引上不再受支持。 旧索引的映射将继续工作,但会发出弃用警告。

影响
_field_namesenabled 设置应从模板和映射中移除。 禁用 _field_names 不再必要,因为它不再带来大的索引开销。

字段映射中的boost参数已被移除。

详情
索引时间提升自5x系列以来已被弃用,但仍然可以在映射中声明特定字段的提升。现在这已完全移除。在7x中构建的包含映射提升的索引将发出警告,并且在8.0中提升将无效。新的索引将完全不允许在其映射中设置提升。

影响
应从模板和映射中移除boost设置。请直接在查询中使用boost。

Java-time 日期格式替换 joda-time 格式。

详情
在7.0版本中,Elasticsearch从joda时间切换到java时间进行与日期相关的解析、格式化和计算。在7.0及更高版本中创建的索引已经需要使用带有java时间日期格式的映射。然而,使用joda时间格式的早期索引必须重新索引以使用带有java时间格式的映射。

影响
有关详细的迁移指南,请参阅Java时间迁移指南

已移除多个geo_shape映射参数。

详情
以下 geo_shape 映射参数在6.6版本中已被弃用:

  • tree
  • tree_levels
  • strategy
  • distance_error_pct

这些参数已在8.0.0中移除。

影响
在8.0中,您不能再创建包含这些参数的映射。 然而,使用这些映射参数的7.x索引将继续正常工作。

已移除sparse_vector字段数据类型。

详情
sparse_vector 字段类型在7.6版本中已被弃用,并在8.0版本中被移除。我们没有看到对此实验性字段类型的广泛兴趣,并且目前的设计中没有明确的用例。如果您对稀疏向量功能有反馈或建议,请通过GitHub或讨论论坛告知我们。

影响
停止使用sparse_vector字段数据类型。包含此字段数据类型映射的请求将返回错误。

打包变更

edit

如果您使用 Elasticsearch Service,请跳过此部分。Elasticsearch Service 会为您处理这些更改。

数据文件夹的布局已更改。

详情
每个节点的数据现在直接存储在由path.data设置的数据目录中,而不是存储在${path.data}/nodes/0中,因为移除了node.max_local_storage_nodes设置,这意味着节点可能不再共享数据路径。

影响
在启动时,Elasticsearch 会自动将数据路径迁移到新的布局。 如果数据路径包含多个节点的数据,此自动迁移将不会进行。 您应在升级前迁移到每个节点都有自己数据路径的配置。

如果您尝试升级一个在数据路径中包含多个节点数据的配置,那么自动迁移将会失败,Elasticsearch 将拒绝启动。要解决这个问题,您需要手动执行迁移。多余节点的数据存储在名为 ${path.data}/nodes/1${path.data}/nodes/2 等的文件夹中,您应该将这些文件夹移动到适当的位置,然后配置相应的节点以使用此位置作为其数据路径。如果您的节点在 path.data 设置中每个都有多个数据路径,那么您应该同时移动所有相应的子文件夹。每个节点在其所有数据路径中使用相同的子文件夹(例如 nodes/2)。

默认的Maxmind geoip数据库已被移除。

详情
Elasticsearch 默认附带的 Maxmind geoip 数据库已被移除。这些数据库已过时且陈旧,使用这些数据库可能会导致 geoip 查找不准确。

自7.13版本起,默认情况下,如果在配置目录中未指定数据库或在geoip下载器下载geoip数据库之前,将使用这些预打包的geoip数据库。当geoip数据库下载器完成下载新数据库后,这些预打包的数据库将不再使用。

影响
如果禁用了geoip下载器,并且在每个摄取节点的配置目录中没有提供geoip数据库,那么geoip处理器将不再执行geoip查找,并将这些文档标记为请求的数据库不再可用。

在集群启动后且geoip下载器完成最新数据库下载之前,geoip处理器将不会执行任何geoip查找,并标记请求的数据库不可用。geoip下载器完成最新数据库下载后,geoip处理器将正常工作。集群启动后geoip处理器无法进行geoip查找的时间窗口应该非常小。

无痛更改

edit
已移除JodaCompatibleZonedDateTime类。

详情
作为从Joda日期时间到Java日期时间的过渡,脚本使用了一个称为JodaCompatibleZonedDateTime的中间类。该类已被移除,并被ZonedDateTime所取代。任何在脚本中使用强制转换到JodaCompatibleZonedDateTime或仅在JodaCompatibleZonedDateTime中可用的方法调用,都将导致编译错误,并且可能不允许升级后的节点启动。

影响
在升级之前,请在任何脚本中将 getDayOfWeek 替换为 getDayOfWeekEnum().value。任何期望返回值为 intgetDayOfWeek 使用都将导致编译错误或运行时错误,并且可能不允许升级后的节点启动。

以下 JodaCompatibleZonedDateTime 方法必须在升级前使用 ZonedDateTime 方法进行替换:

  • getMillis()toInstant().toEpochMilli()
  • getCenturyOfEra()get(ChronoField.YEAR_OF_ERA) / 100
  • getEra()get(ChronoField.ERA)
  • getHourOfDay()getHour()
  • getMillisOfDay()get(ChronoField.MILLI_OF_DAY)
  • getMillisOfSecond()get(ChronoField.MILLI_OF_SECOND)
  • getMinuteOfDay()get(ChronoField.MINUTE_OF_DAY)
  • getMinuteOfHour()getMinute()
  • getMonthOfYear()getMonthValue()
  • getSecondOfDay()get(ChronoField.SECOND_OF_DAY)
  • getSecondOfMinute()getSecond()
  • getWeekOfWeekyear()get(IsoFields.WEEK_OF_WEEK_BASED_YEAR)
  • getWeekyear()get(IsoFields.WEEK_BASED_YEAR)
  • getYearOfCentury()get(ChronoField.YEAR_OF_ERA) % 100
  • getYearOfEra()get(ChronoField.YEAR_OF_ERA)
  • toString(String) → 一个 DateTimeFormatter
  • toString(String, Locale) → 一个 DateTimeFormatter

插件变更

edit

如果您使用 Elasticsearch Service,请跳过此部分。Elasticsearch Service 会为您处理这些更改。

S3、GCS 和 Azure 仓库插件现在已包含在 Elasticsearch 中

详情
在Elasticsearch的早期版本中,为了注册一个由Amazon S3、Google Cloud Storage (GCS)或Microsoft Azure Blob Storage支持的快照仓库,您首先需要安装相应的Elasticsearch插件,例如repository-s3。这些插件现在默认包含在Elasticsearch中。

影响
您不再需要安装以下插件,也不应尝试安装它们。

  • repository-azure
  • repository-gcs
  • repository-s3

Elasticsearch 和 elasticsearch-plugin CLI 工具已更改,以容忍尝试安装和删除这些插件,以避免破坏任何现有的自动化。将来,尝试安装这些插件将会是一个错误。

具体来说,如果您尝试安装上述任何插件,elasticsearch-plugin CLI 工具不会失败,而是会打印一条警告并跳过这些插件。如果这些插件中的任何一个已经安装,例如因为您在运行旧版本的 Elasticsearch 时安装了它们,那么您仍然可以使用 elasticsearch-plugin 删除它们。如果尝试删除未安装的插件,操作将成功但会打印警告。

如果您使用 Docker 运行 Elasticsearch 并且使用配置文件管理插件,那么在升级后首次启动 Elasticsearch 时,如果这些插件已经安装,它将移除上述插件。如果这些插件中的任何一个在您的配置文件中被指定,Elasticsearch 将忽略它们并发出一条警告日志消息。

第三方插件不再能够拦截REST请求(RestHandlerWrapper

详情
在Elasticsearch的早期版本中,第三方插件可以通过实现getRestHandlerWrapper方法来拦截所有发送到节点的REST请求。这个功能的一个常见用途是实现自定义的安全插件来替代内置的安全功能。这个扩展点不再对第三方插件可用。

影响
一些为早期版本的 Elasticsearch 设计的第三方插件可能与 Elasticsearch 8.0 或更高版本不兼容。

如果你依赖于任何不是由Elastic生产和维护的插件,请与插件作者确认,并确保该插件适用于你的目标Elasticsearch版本,然后再进行升级。

REST API 变更

edit
包含 _xpack 的 REST API 端点已被移除。

详情
在7.0版本中,我们弃用了路径中包含_xpack的REST端点。这些端点在8.0版本中已被移除。每个被弃用并移除的端点都被一个新的端点所取代,新端点不包含_xpack。例如,/{index}/_xpack/graph/_explore被替换为/{index}/_graph/explore

影响
使用替换的REST API端点。提交到_xpack API端点的请求将返回错误。

兼容性
当请求rest-api-compatibility时,任何包含`_xpack`前缀的请求都会被重定向到不带_xpack前缀的相应URL。

包含映射类型的REST API端点已被移除。

详情
映射类型已被移除。包含映射类型的API端点也已被移除。请改用无类型的端点。

API Typed API endpoint Typeless API endpoint

批量

//_bulk

<目标>/_bulk

计数

//_count

<目标>/_count

删除

//<_id>

/_doc/<_id>

按查询删除

//_delete_by_query

<目标>/_delete_by_query

解释

//<_id>/_explain

<索引>/_explain/<_id>

获取

//<_id>

<索引>/_doc/<_id>

//<_id>/_source

/_source/<_id>

获取字段映射

_mapping//field/

_mapping/field/

/_mapping//field/

/_mapping/field/

获取映射

_mapping/

_mapping/_mapping

//_mapping

<目标>/_mapping

/_mapping/

<目标>/_mapping

图探索

<索引>/<类型>/_graph/探索

<索引>/_graph/探索

索引

//<_id>/_create

<目标>/_创建/<_id>

/

<目标>/_文档

//<_id>

/_doc/<_id>

多文档获取

//_mget

<索引>/_mget

多搜索

//_msearch

<目标>/_msearch

多搜索模板

//_msearch/template

<目标>/_msearch/模板

多词向量

//_mtermvectors

<索引>/_mtermvectors

汇总搜索

//_rollup_search

<目标>/_rollup_search

搜索

//_search

<目标>/_search

搜索模板

<目标>/<类型>/_search/template

<目标>/_search/template

词向量

//<_id>/_termvectors

<索引>/_termvectors<_id>

<索引>/<映射类型>/_termvectors

<索引>/_termvectors

更新

//<_id>/_update

<索引>/_update/<_id>

按查询更新

//_update_by_query

<目标>/_update_by_query

更新映射

//_mapping

<目标>/_mapping

/_mapping/

<目标>/_mapping

_mapping/

<目标>/_mapping

验证

<目标>/<类型>/_validate/query

<目标>/_validate/query

影响
更新您的应用程序以使用无类型的REST API端点。请求包含映射类型的端点将返回错误。

兼容性
当请求rest-api-compatibility时,如果请求包含自定义映射类型,它将被忽略。请求将被重新路由到相应的无类型URL。请求体中的自定义映射类型和与类型相关的HTTP参数将被忽略,并且在适当的情况下,响应中将包含_type : _doc

跨集群搜索(CCS)现在仅与前一个次要版本向后兼容。

详情
在8.0+版本中,Elastic支持从本地集群到远程集群的搜索,运行:

  • 上一个次要版本。
  • 相同版本。
  • 同一主要版本中的较新次要版本。

Elastic 还支持从运行主要版本最后一个次版本的本地集群搜索到运行下一个主要版本任何次版本的远程集群。例如,本地 7.17 集群可以搜索任何远程 8.x 集群。

远程集群版本

本地集群版本

6.8

7.1–7.16

7月17日

8.0

8.1

8.2

8.3

8.4

8.5

8.6

8.7

8.8

8.9

8.10

8.11

8.12

8.13

8.14

8月15日

6.8

是

是

是

否

否

否

否

否

否

否

否

否

否

否

否

否

否

否

否

7.1–7.16

是

是

是

否

否

否

否

否

否

否

否

否

否

否

否

否

否

否

否

7月17日

是

是

是

是

是

是

是

是

是

是

是

是

是

是

是

是

是

是

是

8.0

否

否

是

是

是

是

是

是

是

是

是

是

是

是

是

是

是

是

是

8.1

否

否

否

是

是

是

是

是

是

是

是

是

是

是

是

是

是

是

是

8.2

否

否

否

否

是

是

是

是

是

是

是

是

是

是

是

是

是

是

是

8.3

否

否

否

否

否

是

是

是

是

是

是

是

是

是

是

是

是

是

是

8.4

否

否

否

否

否

否

是

是

是

是

是

是

是

是

是

是

是

是

是

8.5

否

否

否

否

否

否

否

是

是

是

是

是

是

是

是

是

是

是

是

8.6

否

否

否

否

否

否

否

否

是

是

是

是

是

是

是

是

是

是

是

8.7

否

否

否

否

否

否

否

否

否

是

是

是

是

是

是

是

是

是

是

8.8

否

否

否

否

否

否

否

否

否

否

是

是

是

是

是

是

是

是

是

8.9

否

否

否

否

否

否

否

否

否

否

否

是

是

是

是

是

是

是

是

8.10

否

否

否

否

否

否

否

否

否

否

否

否

是

是

是

是

是

是

是

8.11

否

否

否

否

否

否

否

否

否

否

否

否

否

是

是

是

是

是

是

8.12

否

否

否

否

否

否

否

否

否

否

否

否

否

否

是

是

是

是

是

8.13

否

否

否

否

否

否

否

否

否

否

否

否

否

否

否

是

是

是

是

8.14

否

否

否

否

否

否

否

否

否

否

否

否

否

否

否

否

是

是

是

8月15日

否

否

否

否

否

否

否

否

否

否

否

否

否

否

否

否

否

是

是

对于EQL搜索API,如果本地和远程集群的版本在7.17.7(包括)之前或8.5.1(包括)之前,它们必须使用相同的Elasticsearch版本。

例如,本地 8.0 集群可以搜索远程 7.17 或任何远程 8.x 集群。然而,从本地 8.0 集群到远程 7.16 或 6.8 集群的搜索是不支持的。

之前,我们还支持在运行以下内容的远程集群上进行搜索:

  • 本地集群主要版本的任何次要版本。
  • 前一个主要版本的最后一个次要版本。

然而,此类搜索可能会导致未定义的行为。

影响
如果您仅在使用相同或更新版本的远程集群上运行跨集群搜索,则无需进行任何更改。

如果您之前搜索过运行早期版本的 Elasticsearch 的远程集群,请参阅 确保跨集群搜索支持 以获取推荐的解决方案。

使用不支持配置的跨集群搜索可能仍然有效。然而,此类搜索未经过Elastic的测试,其行为不保证。

The terms aggregation no longer supports the _term order key.

详情
terms 聚合不再支持在 order 值中使用 _term 键。要按术语对桶进行排序,请改用 _key

影响
停止使用 _term 排序键。包含 _term 排序键的请求将返回错误。

兼容性
当请求rest-api-compatibility时,_term顺序被忽略,改为使用key

不再支持使用 _time 作为 date_histogram 聚合的排序键。

详情
date_histogram 聚合不再支持在 order 值中使用 _time 键。要按桶的键排序,请改用 _key

影响
停止使用 _time 排序键。包含 _time 排序键的请求将返回错误。

兼容性
当请求rest-api-compatibility时,_time顺序被忽略,改为使用_key

已移除moving_avg聚合。

详情
moving_avg 聚合在6.4版本中已被弃用并已被移除。要计算移动平均值,请使用 moving_fn 聚合

影响
停止使用 moving_avg 聚合。包含 moving_avg 聚合的请求将返回错误。

The percentiles aggregation’s percents parameter no longer supports duplicate values.

详情
如果你在百分位数聚合中指定了百分比参数,其值必须是唯一的。否则,会发生异常。

影响
percentiles 聚合的 percents 参数中使用唯一值。 包含重复值的请求将在 percents 参数中返回错误。

不再有效的date_histogram聚合的interval参数。

详情
现在指定interval参数给 date_histogram 聚合https://www.elastic.co/guide/en/elasticsearch/reference/master/search-aggregations-bucket-composite-aggregation.html#_date_histogram[composite date_histogram源。 请改用calendar_intervalfixed_interval

影响
date_histogram聚合或date_histogram复合源中使用interval参数将生成错误。请改用更具体的fixed_intervalcalendar_interval参数。

兼容性
当请求rest-api-compatibility时,interval参数会被调整为固定或日历间隔。

已移除 nGramedgeNGram 分词过滤器的名称。

详情
自版本6.4以来已弃用的nGramedgeNGram分词过滤器名称已被移除。自版本7.0以来,这两个分词过滤器只能通过它们的替代名称ngramedge_ngram使用。

影响
使用等效的 ngramedge_ngram 分词过滤器。包含 nGramedgeNGram 分词过滤器名称的请求将返回错误。

已移除nGramedgeNGram分词器名称。

详情
nGramedgeNGram 分词器名称在7.6版本中已被弃用,并且在新索引上不再支持。7.6版本之后创建的索引的映射将继续工作,但会发出弃用警告。对于新索引和索引模板,分词器名称应更改为完全等效的 ngramedge_ngram 名称。

影响
使用 ngramedge_ngram 分词器。请求创建新索引时使用 nGramedgeNGram 分词器名称将会返回错误。

统计信息 in_flight_requests 在日志和诊断 API 中已重命名为 inflight_requests

详情
日志输出和诊断API(如节点状态API)中正在进行的请求断路器的名称从in_flight_requests更改为inflight_requests,以与相应设置的名称保持一致。

影响
更新您的工作流程和应用程序以使用 inflight_requests 统计信息代替 in_flight_requests

投票配置排除API端点已更改。

详情
POST /_cluster/voting_config_exclusions/{node_filter} API 已被移除,取而代之的是 POST /_cluster/voting_config_exclusions?node_names=...POST /_cluster/voting_config_exclusions?node_ids=...,它们允许您指定要排除的节点的名称或ID。

影响
使用 POST /_cluster/voting_config_exclusions?node_ids=... 并指定要排除的节点,而不是使用节点过滤器。提交到 /_cluster/voting_config_exclusions/{node_filter} 端点的请求将返回错误。

如果远程系统索引与自动跟随模式匹配,它们不会自动被跟随。

详情
自动跟随模式匹配的远程系统索引不会自动配置为跟随者索引。

影响
如果这是所需的行为,请显式创建一个跟随索引以跟随远程系统索引。

EQL 的 wildcard 函数已被移除。

详情
wildcard 函数在 Elasticsearch 7.13.0 中已被弃用并已被移除。

影响
使用 likeregex 关键词 代替。

ILM freeze 操作现在是一个无操作。

详情
ILM冻结操作现在是一个无操作,不会对索引执行任何操作,因为在8.0中已移除冻结API端点。

影响
更新您的ILM策略以从阶段中移除冻结操作。

ILM 策略的额外验证。

详情
创建或更新ILM策略现在要求任何引用的快照存储库和SLM策略都必须存在。

影响
更新您的代码或配置管理,以确保在引用它们的任何策略之前创建存储库和SLM策略。

已弃用的_upgrade API已被移除。

详情
以前,_upgrade API 用于将索引从上一个主要版本升级到当前版本。现在应该使用 _reindex API 来实现这一目的。

影响
对旧的 _upgrade API 的请求将返回错误。

已弃用的冻结索引API已被移除。

详情
冻结索引 API (POST //_freeze) 已被移除。 堆内存使用的改进 已经消除了冻结索引的原因。 您仍然可以使用 解冻索引 API 解冻现有的冻结索引。对于某些用例,冻结层可能是冻结索引的合适替代品。有关更多信息,请参阅 数据层

影响
对旧的冻结索引 API 的请求将返回错误。

force merge API 的 max_num_segmentsonly_expunge_deletes 参数不能在同一请求中同时指定。

详情
之前,force merge API允许参数only_expunge_deletesmax_num_segments同时设置为非默认值。但是当only_expunge_deletes设置为true时,max_num_segments会被静默忽略,给人留下已经应用的错误印象。

影响
在使用强制合并 API时,不要同时为max_num_segmentsonly_expunge_deletes参数指定值。 包含这两个参数值的请求将返回错误。

创建或更新索引模板 API 的 template 参数已被移除。

详情
在6.0版本中,我们弃用了在创建或更新索引模板请求中使用的template参数,转而使用index_patterns。现在,在8.0版本中,template参数的支持已被移除。

影响
使用创建或更新索引模板 APIindex_patterns参数。包含template参数的请求将返回错误。

兼容性
当请求rest-api-compatibility时,template参数被映射到index_patterns

同步刷新已被移除。

详情
同步刷新在7.6版本中已被弃用,并在8.0版本中被移除。请改用常规刷新,因为它在7.6及以后的版本中具有与同步刷新相同的效果。

影响
使用 flush API。对 //flush/synced/flush/synced 端点的请求将返回错误。

兼容性
当请求rest-api-compatibility时,同步刷新请求会被路由到等效的非同步刷新URL。

关闭索引API中?wait_for_active_shards参数的默认值已更改。

详情
在早期版本中,关闭索引时,Elasticsearch 默认不会等待关闭索引的分片被正确分配后再返回。从 8.0 版本开始,默认行为是根据 index.write.wait_for_active_shards 索引设置等待分片被分配。

影响
接受新的行为,或者指定 ?wait_for_active_shards=0 以在需要时保留旧的行为。

索引统计API的types查询参数已被移除。

详情
索引统计API的types查询参数已被移除。以前,您可以结合typesindexing查询参数来返回特定映射类型的索引统计信息。映射类型已在8.0中被移除。

影响
停止使用types查询参数。包含该参数的请求将返回错误。

兼容性
当请求rest-api-compatibility时,types查询参数将被忽略,并且会返回整个索引的统计信息。

The user_agent ingest processor’s ecs parameter has no effect.

详情
在7.2版本中,我们弃用了user_agent摄取处理器中的ecs参数。 在8.x版本中,user_agent摄取处理器将仅返回Elastic Common Schema (ECS)字段,无论ecs值如何。

影响
为避免弃用警告,请从您的摄取管道中移除该参数。 如果管道指定了ecs值,该值将被忽略。

查询参数 include_type_name 已被移除。

详情
include_type_name 查询参数已从索引创建、索引模板和映射API中移除。以前,您可以将 include_type_name 设置为 true,以指示请求和响应应包含映射类型名称。映射类型已在8.x中移除。

影响
停止使用include_type_name查询参数。包含该参数的请求将返回错误。

兼容性
当请求rest-api-compatibility时,include_type_name查询参数被忽略,并且请求中的任何自定义映射类型都会被移除。

从远程重新索引现在重新编码URL编码的索引名称。

详情
从远程重新索引之前允许使用URL编码的索引名称,并且在生成远程主机的搜索请求时不重新编码它们。这种宽松性已被移除,因此在重新索引生成远程搜索请求时,所有索引名称都会被正确编码。

影响
为远程请求的重索引指定未编码的索引名称。

在重新索引、按查询删除和按查询更新API中,size参数已被重命名。

详情
之前,一个 _reindex 请求在请求体中有两个不同的尺寸规格:

  • 外层级别,确定要处理的最大文档数量
  • source 元素内部,确定滚动/批处理大小。

外层级别的 size 参数现在已重命名为 max_docs,以避免混淆并明确其语义。

同样地,size 参数已重命名为 max_docs,以保持 _delete_by_query_update_by_query 这三个接口的一致性。

影响
使用替换参数。包含size参数的请求将返回错误。

兼容性
当请求rest-api-compatibility时,size参数被映射到max_docs参数。

通过查询API更新现在拒绝不支持的script字段。

详情
一个包含不支持字段的更新查询API请求现在会返回错误。以前,API会默默忽略这些不支持的字段。

影响
为了避免错误,请从script对象中移除不支持的字段。

cat节点API的local查询参数已被移除。

详情
?local 参数在 7.x 版本中已被弃用,并在 8.0 版本中被拒绝。此参数导致 API 使用本地集群状态来确定由 API 返回的节点,而不是从主节点获取的集群状态,但此 API 请求信息来自每个选定的节点,无论 ?local 参数如何,这意味着此 API 不能完全以节点本地方式运行。

影响
停止使用?local查询参数。包含此参数的cat node API请求将返回错误。

The cat shard API 的 local 查询参数已被移除。

详情
?local 参数在 7.x 版本中已被弃用,并在 8.0 版本中被拒绝使用。该参数导致 API 使用本地集群状态来确定由 API 返回的节点,而不是从主节点获取集群状态,但此 API 请求信息来自每个选定的节点,无论是否使用 ?local 参数,这意味着此 API 不能完全以节点本地方式运行。

影响
停止使用?local查询参数。包含此参数的cat shards API请求将返回错误。

cat indices API 的 local 查询参数已被移除。

详情
?local 参数在 7.x 版本中已被弃用,并在 8.0 版本中被拒绝使用。该参数导致 API 使用本地集群状态来确定由 API 返回的节点,而不是从主节点获取的集群状态,但此 API 请求信息来自每个选定的节点,无论是否使用 ?local 参数,这意味着此 API 并未完全以节点本地方式运行。

影响
停止使用?local查询参数。包含此参数的cat indices API请求将返回错误。

get field mapping API 的 local 查询参数已被移除。

详情
get field mapping API 的 local 参数在 7.8 版本中已被弃用,并在 8.0 版本中被移除。此参数已无操作,字段映射始终在本地检索。

影响
停止使用local查询参数。 获取字段映射API请求中包含此参数将返回错误。

向作业API发布数据已被弃用。

详情
机器学习 向作业发送数据 API 从 7.11.0 开始已弃用,并将在未来的主要版本中移除。

影响
使用 datafeeds 替代。

Update datafeeds API 的 job_id 属性已被移除。

详情
在7.3.0中,更新数据馈送中的job_id的功能已被弃用,并在8.0中被移除。

影响
无法在异常检测作业之间移动数据馈送。

创建仓库和删除仓库的API在仓库被使用时返回409状态码,而不是500

详情
创建或更新快照仓库 API删除快照仓库 API 在请求尝试修改现有仓库时返回 409 状态码,而不是状态码 500

影响
更新处理仓库创建和删除的客户端代码以反映此更改。

机器学习API中已移除allow_no_datafeeds属性。

详情
allow_no_datafeeds 属性在 7.10.0 版本的 cat datafeedsget datafeedsget datafeed statisticsstop datafeeds API 中已被弃用。

影响
使用 allow_no_match 代替。

机器学习API中已移除allow_no_jobs属性。

详情
allow_no_jobs 属性在 7.10.0 中已被弃用,涉及的 API 包括: cat 异常检测器关闭异常检测作业获取异常检测作业获取异常检测作业统计信息获取整体桶

影响
使用 allow_no_match 代替。

StartRollupJob 端点现在如果作业已经启动,则返回成功状态。

详情
之前,尝试启动一个已经启动的汇总作业会导致500 InternalServerError: 无法启动汇总作业[job],因为状态为[STARTED]异常。

现在,尝试启动一个已经启动的任务将只会返回一个成功的200 OK: 已启动响应。

影响
更新您的流程和应用程序,以假设在尝试启动汇总作业时,响应中的200状态码表示作业处于活动启动状态。请求本身可能已经启动了作业,或者作业之前已经在运行,因此请求没有产生效果。

存储的脚本不再支持空脚本或搜索模板。

详情
创建或更新存储脚本 APIsource参数不能为空。

影响
在升级之前,使用删除存储脚本API删除任何空的存储脚本或搜索模板。 在8.0中,Elasticsearch将从集群状态中删除任何空的存储脚本或空的搜索模板。 创建存储脚本或搜索模板的请求如果带有空的source将返回错误。

创建或更新存储脚本 API 的 code 参数已被移除。

详情
创建或更新存储脚本 APIcode 参数已被移除。请改用 source 参数。

影响
停止使用code参数。包含该参数的请求将返回错误。

不再支持对_type字段的搜索。

详情
在8.x版本中,_type元数据字段已被移除。Elasticsearch现在将_type字段上的搜索视为对不存在的字段的搜索。对不存在的字段的搜索不会匹配任何文档,无论查询字符串是什么。

在7.x版本中,在_type字段中搜索_doc将与match_all查询匹配相同的文档。

影响
从您的搜索请求和搜索模板中移除对_type字段的查询。包含这些查询的搜索可能会返回无结果。

多搜索API现在将文本文件中的空第一行解析为操作元数据。

详情
当您提供一个文本文件作为请求体时,例如在使用curl的--data-binary标志时,多搜索API现在会将空的第一行解析为空的行动元数据。

该API不再支持包含以下内容的文本文件:

  • 第一行空白,后面跟着一行只包含 {}
  • 第一行空白,后面跟着另一行空白。

影响
不要向多搜索API提供不支持的文本文件。包含不支持文件的请求将返回错误。

已移除unmapped_type: string排序选项。

详情
搜索请求不再支持 unmapped_type: string 排序选项。 相反,使用 unmapped_type: keyword 将未映射的字段视为具有 keyword 字段类型,但在排序时忽略其值。

影响
停止使用 unmapped_type: string。包含 unmapped_type: string 排序选项的搜索请求将返回分片失败。

默认情况下,不允许对_id进行聚合和排序。

详情
以前,可以通过加载称为fielddata的昂贵数据结构来对内置的_id字段进行聚合和排序。这在7.6中已被弃用,现在在8.0中默认被禁止。

影响
应避免对_id进行聚合和排序。作为替代方案,可以将_id字段的内容复制到另一个启用了docvalues的字段中(注意,这不适用于自动生成的ID)。

已删除common查询。

详情
在7.x中已弃用的common查询,在8.0中已被移除。 如果不需要跟踪总命中数,可以通过match查询实现相同的功能。

影响
停止使用common查询。包含common查询的搜索请求将返回错误。

已从matchmulti_match查询中移除cutoff_frequency参数。

详情
在7.x中已弃用的cutoff_frequency参数,已在8.0中从matchmulti_match查询中移除。 如果不需要跟踪总命中数,则无需任何配置即可实现相同的功能。

影响
停止使用cutoff_frequency参数。在matchmulti_match查询中包含此参数的搜索请求将返回错误。

搜索API的sort请求体参数中已移除nested_filternested_path属性。

详情
nested_filternested_path 选项在 6.x 中已被弃用,现已被移除,取而代之的是 nested 上下文。

影响
停止使用 sort 请求体参数中的 nested_filternested_path 属性。包含这些属性的请求将返回错误。

搜索和获取请求现在默认使用自适应副本选择路由到分片。

详情
Elasticsearch 将不再优先使用位于同一位置(具有相同感知属性值)的分片来处理 _search_get 请求。自适应副本选择(在此版本中默认激活)将使用先前节点间通信的服务时间更高效地路由请求。

影响
无需采取行动。

使用 (query, doc['field']) 的向量函数不再受支持。

详情
形式为 function(query, doc['field']) 的向量函数在 7.6 版本中已被弃用,并在 8.x 版本中被移除。应使用形式 function(query, 'field') 代替。例如,cosineSimilarity(query, doc['field']) 被替换为 cosineSimilarity(query, 'field')

影响
使用 function(query, 'field') 形式。停止使用 function(query, doc['field']) 形式。包含 function(query, doc['field']) 形式的请求将返回错误。

搜索API的indices_boost请求体参数不再接受对象值。

详情
搜索请求中的indices_boost选项过去既可以接受对象格式,也可以接受数组格式。对象格式自5.2版本起已被弃用,现在在8.0版本中已被移除。

影响
仅在 indices_boost 参数中使用数组值。包含对象值的请求将返回错误。

搜索API的use_field_mapping请求体参数已被移除。

详情
在7.0版本中,我们开始使用每个字段的映射定义来默认格式化docvalue_fields。为了简化从6.x版本的过渡,我们添加了格式选项use_field_mapping。此参数在7.0版本中已被弃用,并在8.0版本中被移除。

影响
停止使用 use_field_mapping 请求体参数。包含此参数的请求将返回错误。

兼容性
当请求rest-api-compatibility时,use_field_mapping参数将被忽略。

搜索API的from请求体和URL参数不能为负数。

详情
搜索请求过去接受 -1 作为搜索体和URL中的 from 值,并将其视为默认值0。其他负值已经被拒绝并返回错误。我们现在也拒绝 -1 作为无效值。

影响
将请求体或URL参数中任何使用-1作为from参数的情况更改为0或完全省略它。包含负值的请求将返回错误。

日期字段上的范围查询始终将数值视为自纪元以来的毫秒数。

详情
日期字段上的范围查询过去会错误地将小数字(例如像1000这样的四位数)解释为年份,当没有设置额外的格式时,但会将其他数值解释为自纪元以来的毫秒数。我们现在在没有特定format参数的情况下,将所有数值视为自纪元以来的毫秒数。如果你想查询年份,在没有format的情况下,现在需要将输入值加上引号(例如 "1984")。

影响
如果你查询日期字段时没有指定format,检查你的查询值是否实际上是自纪元以来的毫秒数,并在这种情况下使用数值。如果不是,请使用字符串值,该值将由映射中字段设置的日期格式或默认情况下由strict_date_optional_time解析。

已移除 geo_bounding_box 查询的 type 参数。

详情
geo_bounding_box 查询的 type 参数在 7.14.0 版本中已被弃用,并在 8.0.0 版本中被移除。此参数为无操作,对查询没有影响。

影响
停止使用type参数。包含此参数的geo_bounding_box查询将返回错误。

已移除type查询。

详情
type 查询已被移除。映射类型已在8.0中移除。

影响
停止使用type查询。包含type查询的请求将返回错误。

The kibana_user 角色已被重命名为 kibana_admin

详情
之前被分配了kibana_user角色的用户应改为分配kibana_admin角色。此角色授予与kibana_user相同的权限集,但已重命名以更好地反映其预期用途。

影响
将具有kibana_user角色的用户分配到kibana_admin角色。 停止使用kibana_user角色。

对于快照和SLM API,indices 参数不再解析为系统索引或系统数据流。

详情
对于快照和SLM API,indices参数不再解析为系统索引或系统数据流。 功能状态现在是唯一的方式 从快照备份和恢复系统索引或系统数据流。

您不能再使用 indices 参数来为 创建 SLM 策略 API创建快照 API 包含系统索引。 要备份系统索引,请使用 include_global_statefeature_states 参数来包含相应的功能状态。 默认情况下,include_global_statefeature_states 参数包含所有系统索引。

同样地,您不能再使用恢复快照APIindices参数从快照中恢复系统索引。要恢复系统索引,请使用include_global_statefeature_states参数来恢复相应的功能状态。默认情况下,include_global_statefeature_states参数不会恢复任何系统索引。

影响
如果您之前使用 indices 参数来备份或恢复系统索引,请更新您的 SLM 策略和应用程序,改为使用 include_global_statefeature_states 参数。

indices参数中明确指定系统索引的SLM策略将无法创建快照。同样,在indices参数中明确指定系统索引的创建快照API或恢复快照API请求将失败并返回错误。如果indices值包含通配符(*)模式,该模式将不再匹配系统索引。

快照默认压缩元数据文件。

详情
之前,compress 的默认值是 false。现在默认值已更改为 true

此更改将影响新创建的仓库和未明确指定 compress=false 的现有仓库。

影响
更新你的工作流程和应用程序,假设compress参数的默认值为true

S3快照仓库现在默认使用DNS风格的访问模式。

详情
从版本7.4开始,s3快照仓库不再默认使用现已弃用的路径样式访问模式。在版本7.0、7.1、7.2和7.3中,s3快照仓库始终使用路径样式访问模式。对于仅支持路径样式访问但被AWS SDK识别为支持DNS样式访问的部署,这是一个重大更改。这一重大更改是必要的,因为AWS宣布路径样式访问模式已被弃用,并且在2020年9月30日之后创建的存储桶将不再支持该模式。

影响
如果你的部署仅支持路径样式访问并且受到此更改的影响,那么你必须将S3客户端设置path_style_access配置为true

恢复请求不再接受设置。

详情
在早期版本中,您可以在恢复快照请求的正文中传递settingsindex_settings,但settings值被忽略了。现在,恢复快照API会拒绝包含settings值的请求。

影响
停止在恢复快照请求中使用settings参数。包含这些参数的请求将返回错误。

仓库统计 API 已被移除。

详情
仓库统计 API 已被移除。我们在 7.10.0 版本中弃用了这个实验性 API。

影响
使用 repositories metering APIs 代替。

观察者历史现在写入一个隐藏的数据流。

详情
在8.x版本中,Elasticsearch将Watcher历史记录写入到一个隐藏的 .watcher-history- 数据流中。之前,Elasticsearch将Watcher历史记录写入到隐藏的 .watcher-history-- 索引中。

影响
更新您的请求以针对 Watcher 历史数据流。例如,使用 .watcher-history-* 通配符表达式。专门针对不存在的 Watcher 历史索引的请求可能会返回错误。

HTTP状态码在服务器超时情况下已更改,适用于集群健康API。

详情
集群健康 API 包括等待某些健康条件满足的选项。如果在超时时间内未满足请求的条件,Elasticsearch 将返回一个包含字段 "timed_out": true 的正常响应。在早期版本中,如果请求超时,它还会使用 HTTP 响应代码 408 Request timeout,否则使用 200 OK408 Request timeout 响应代码不适用于这种情况,因此从版本 8.0.0 开始,Elasticsearch 将在两种情况下都使用响应代码 200 OK

影响
要检测服务器超时,请检查JSON响应中的timed_out字段。

SQL JDBC 变更

edit
JDBC驱动程序将几何对象作为熟知文本字符串返回,而不是org.elasticsearch.geo对象。

详情
为了减少JDBC驱动程序对Elasticsearch类的依赖,JDBC驱动程序返回几何数据时使用WKT(熟知文本)格式作为字符串,而不是使用org.elasticsearch.geometry中的类。用户可以选择所需的几何库将字符串表示转换为完整的对象,例如elasticsearch-geo库(以前返回org.elasticsearch.geo对象)、jts或spatial4j。

影响
在升级之前,请将 ResultSet#getObjectResultSet#setObject 中的任何 org.elasticsearch.geo 类替换为其WKT表示形式,只需调用 toStringorg.elasticsearch.geometry.utils.WellKnownText#toWKT/fromWKT 方法。

此更改不会影响不使用几何类的用户。

系统要求变更

edit

如果您使用 Elasticsearch Service,请跳过此部分。Elasticsearch Service 会为您处理这些更改。

多个EOL操作系统不再受支持。

详情
以下操作系统已达到其生命周期终点,不再受Elasticsearch支持:

  • 亚马逊Linux
  • CentOS 6
  • Debian 8
  • openSUSE Leap 42
  • Oracle企业Linux 6
  • Ubuntu 16.04

我们也移除了对 SysV init 的支持。没有支持的操作系统使用 SysV init 进程。

详情
确保您的节点使用 受支持的操作系统。 在不受支持的操作系统上运行Elasticsearch可能会导致意外错误或故障。

需要Java 17。

详情
运行Elasticsearch及其任何命令行工具现在需要Java 17或更高版本。

影响
使用 Java 17 或更高版本。尝试使用较早的 Java 版本运行 Elasticsearch 8.0 将会失败。

目前还没有适用于 Java 17 的 FIPS 认证安全模块, 当您在 FIPS 140-2 模式下运行 Elasticsearch 8.0 时可以使用。 如果您在 FIPS 140-2 模式下运行,您将需要向您的安全组织申请例外 以升级到 Elasticsearch 8.0, 或者在 Java 17 获得认证之前继续使用 Elasticsearch 7.x。

JAVA_HOME 不再被支持。

详情
JAVA_HOME 不再支持用于设置JDK路径。请改用捆绑的JDK(推荐),或者设置 ES_JAVA_HOME

影响
使用捆绑的JDK(首选),或者设置ES_JAVA_HOMEJAVA_HOME将被忽略。

转换更改

edit
在7.4或更早版本中创建的转换必须升级。

详情
早期测试版本的转换工具使用了不再支持的配置信息格式。

影响
使用 升级转换 API 来修复您的转换。此升级不会影响源索引或目标索引。

弃用

edit

以下功能在Elasticsearch 8.0中已被弃用,并将在未来的版本中移除。 虽然这不会对您的应用程序产生直接影响, 但我们强烈建议您在升级到8.0后采取所述步骤更新您的代码。

要了解是否使用了任何已弃用的功能,请启用弃用日志记录

集群和节点设置弃用

edit
我们不再推荐使用瞬态集群设置。

详情
我们不再推荐使用瞬态集群设置。请改用持久集群设置。如果集群变得不稳定,瞬态设置可能会意外清除,导致不希望的集群配置。

影响
瞬态集群设置尚未被弃用,但我们计划在未来的版本中弃用它们。有关迁移步骤,请参阅瞬态设置迁移指南

命令行工具弃用

edit

如果您使用 Elasticsearch Service,请跳过此部分。Elasticsearch Service 会为您处理这些更改。

工具 elasticsearch-setup-passwords 已被弃用。

详情
elasticsearch-setup-passwords 工具在 8.0 中已被弃用。要手动重置内置用户(包括 elastic 用户)的密码,请使用 elasticsearch-reset-password 工具、Elasticsearch 更改密码 API 或 Kibana 中的用户管理功能。 elasticsearch-setup-passwords 将在未来的版本中被移除。

影响
当你第一次启动Elasticsearch时,会自动为elastic用户生成密码。如果你在启动Elasticsearch后运行elasticsearch-setup-passwords,它将会失败,因为elastic用户的密码已经配置好了。

Java 时间迁移指南

edit

在7.0版本中,Elasticsearch从joda时间切换到java时间进行与日期相关的解析、格式化和计算。本指南旨在帮助您确定您的集群是否受到影响,如果是,则准备升级。

转换日期格式

edit

要升级到 Elasticsearch 8,您需要将任何 joda-time 日期格式转换为其 java-time 等效格式。

受影响的功能

edit

切换到java时间仅影响自定义的datedate_nanos格式。

这些格式通常用于:

如果您不使用自定义日期格式,可以跳过本指南的其余部分。 大多数自定义日期格式是兼容的。然而,有几个需要更新。

要查看您的日期格式是否受到影响,请使用弃用信息APIKibana升级助手

不兼容的日期格式

edit

包含以下joda-time字面量的自定义日期格式应进行迁移。

Y (Year of era)

替换为 y

示例: YYYY-MM-dd 应该变成 yyyy-MM-dd

在Java时间中,Y 用于 基于周的年份。 使用 Y 代替 y 可能会导致年份计算中出现偏差一的错误。

对于模式 YYYY-ww 和日期 2019-01-01T00:00:00.000Z 将给出 2019-01 对于模式 YYYY-ww 和日期 2018-12-31T00:00:00.000Z 将给出 2019-01(反直觉)因为该周有超过4天在2019年

y (Year)

替换为 u

示例: yyyy-MM-dd 应变为 uuuu-MM-dd

在Java时间中,y 用于表示纪元年份。u 可以包含非正值,而 y 不能。y 也可以与纪元字段相关联。

C (Century of era)

纪元世纪在Java时间中不被支持。 没有替代方案。相反,我们建议您预处理您的输入。

x (Week year)

替换为 Y

在Java时间中,x 表示 时区偏移

未能正确将x(周年)转换为Y可能导致数据丢失。

Z (Zone offset/id)

替换为多个 X

Z 在 java 时间中具有类似的意义。然而,java 时间期望不同的字面量数量来解析不同的形式。

考虑迁移到 X,它让你对时间解析有更多的控制。 例如,joda-time 格式 YYYY-MM-dd'T'hh:mm:ssZZ 接受以下日期:

2010-01-01T01:02:03Z
2010-01-01T01:02:03+01
2010-01-01T01:02:03+01:02
2010-01-01T01:02:03+01:02:03

在Java时间中,您不能使用单一格式解析所有这些日期。相反,您必须指定3种不同的格式:

2010-01-01T01:02:03Z
2010-01-01T01:02:03+01
both parsed with yyyy-MM-dd'T'hh:mm:ssX

2010-01-01T01:02:03+01:02
yyyy-MM-dd'T'hh:mm:ssXXX

2010-01-01T01:02:03+01:02:03
yyyy-MM-dd'T'hh:mm:ssXXXXX

然后必须使用 || 来分隔格式:

yyyy-MM-dd'T'hh:mm:ssX||yyyy-MM-dd'T'hh:mm:ssXXX||yyyy-MM-dd'T'hh:mm:ssXXXXX

如果你期望你的模式在没有冒号(:)的情况下出现,同样适用: 例如,YYYY-MM-dd'T'hh:mm:ssZ 格式接受以下日期形式:

2010-01-01T01:02:03Z
2010-01-01T01:02:03+01
2010-01-01T01:02:03+0102
2010-01-01T01:02:03+010203

要在Java时间中接受所有这些形式,您必须使用||分隔符:

yyyy-MM-dd'T'hh:mm:ssX||yyyy-MM-dd'T'hh:mm:ssXX||yyyy-MM-dd'T'hh:mm:ssXXXX
d (Day)

在Java时间中,d 仍然被解释为“天”,但灵活性较低。

例如,joda-time日期格式YYYY-MM-dd接受2010-01-012010-01-1

在Java时间中,您必须使用||分隔符来指定每个格式:

yyyy-MM-dd||yyyy-MM-d

在Java时间中,d 也不接受超过2位数字。要接受超过两位的天数,您必须在Java时间日期格式中包含一个文本字面量。 例如,要解析 2010-01-00001,您必须使用以下Java时间日期格式:

yyyy-MM-'000'dd
e (Name of day)

在Java时间中,e 仍然被解释为“星期几的名称”,但不解析短文本或全文形式。

例如,joda-time日期格式EEE YYYY-MM接受Wed 2020-01Wednesday 2020-01

要在 Java 时间中接受这两个日期,您必须使用 || 分隔符指定每个格式:

cccc yyyy-MM||ccc yyyy-MM

joda-time 字面量 E 被解释为“星期几”。 java-time 字面量 c 被解释为“本地化的星期几”。 E 不接受全文本的星期格式,例如 Wednesday

EEEE and similar text forms

对全文形式的支持取决于您的 Java 开发工具包 (JDK) 提供的区域设置数据和其他实现细节。我们建议您在升级前仔细测试包含这些模式的格式。

z (Time zone text)

在Java时间中,z 输出 Z 表示祖鲁时间(UTC时区)。

使用您的数据进行测试

edit

我们强烈建议您在生产环境中部署之前,使用真实数据测试任何日期格式的更改。

更新索引映射

edit

要更新索引映射中的joda-time日期格式,您必须创建一个具有更新映射的新索引,并将数据重新索引到其中。

以下 my-index-000001 索引包含一个 datetime 字段的映射,以及一个使用自定义 joda-time 日期格式的 date 字段。

GET my-index-000001/_mapping
{
  "my-index-000001" : {
    "mappings" : {
      "properties" : {
         "datetime": {
           "type": "date",
           "format": "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd||epoch_millis"
         }
      }
    }
  }
}

要更改 datetime 字段的日期格式,请创建一个包含更新映射和日期格式的单独索引。

例如,以下 my-index-000002 索引将 datetime 字段的日期格式更改为 uuuu/MM/dd HH:mm:ss||uuuu/MM/dd||epoch_millis

PUT my-index-000002
{
  "mappings": {
    "properties": {
      "datetime": {
        "type": "date",
        "format": "uuuu/MM/dd HH:mm:ss||uuuu/MM/dd||epoch_millis"
      }
    }
  }
}

接下来,将数据从旧索引重新索引到新索引。

以下reindex API请求将数据从my-index-000001重新索引到my-index-000002

POST _reindex
{
  "source": {
    "index": "my-index-000001"
  },
  "dest": {
    "index": "my-index-000002"
  }
}

如果你使用索引别名,请更新它们以指向新索引。

POST /_aliases
{
  "actions" : [
    { "remove" : { "index" : "my-index-000001", "alias" : "my-index" } },
    { "add" : { "index" : "my-index-000002", "alias" : "my-index" } }
  ]
}

瞬态设置迁移指南

edit

我们不再推荐使用瞬态集群设置。您可以使用瞬态设置对集群进行临时配置更改。然而,集群重启或集群不稳定可能会意外清除这些设置,导致可能不希望的集群配置。

为了避免这种风险,请重置您在集群上配置的任何临时设置。将您希望保留的任何临时设置转换为持久设置,这些设置在集群重启和集群不稳定时仍然有效。您还应该更新任何自定义工作流和应用程序,以使用持久设置而不是临时设置。

一些Elastic产品在执行特定操作时可能会使用瞬态设置。仅重置由您、您的用户或您的自定义工作流和应用程序配置的瞬态设置。

重置并转换瞬态设置:

  1. 使用集群获取设置API获取任何已配置的临时设置列表。

    GET _cluster/settings?flat_settings=true&filter_path=transient

    API 在 transient 对象中返回瞬态设置。如果此对象为空,则您的集群没有瞬态设置,您可以跳过剩余的步骤。

    {
      "persistent": { ... },
      "transient": {
        "cluster.indices.close.enable": "false",
        "indices.recovery.max_bytes_per_sec": "50mb"
      }
    }
  2. 将您希望转换的任何设置复制到集群更新设置 API请求的persistent对象中。在同一请求中,通过将它们赋值为null来重置任何瞬态设置。

    PUT _cluster/settings
    {
      "persistent": {
        "cluster.indices.close.enable": false,
        "indices.recovery.max_bytes_per_sec": "50mb"
      },
      "transient": {
        "*": null
      }
    }
  3. 使用集群获取设置 API 来确认您的集群没有剩余的瞬态设置。

    GET _cluster/settings?flat_settings=true

    如果transient对象为空,则您的集群没有瞬态设置。

    {
      "persistent": {
        "cluster.indices.close.enable": "false",
        "indices.recovery.max_bytes_per_sec": "50mb",
        ...
      },
      "transient": {
      }
    }