迁移到 8.0

编辑

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

另请参阅 8.17 版本的新增功能发行说明

重大更改

编辑

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

集群和节点设置更改

编辑

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

action.destructive_requires_name 现在默认为 truelogo cloud

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

以前,默认为 false 允许用户使用通配符模式来删除、关闭或更改索引上的索引块。为了防止意外删除与通配符模式匹配的索引,我们现在默认要求破坏性操作显式命名要修改的索引。

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

您不能再在非冻结节点上设置 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 将导致启动时出错。集群更新设置 APIindices.lifecycle.poll_interval 设置为小于 1s 的请求将返回错误。

文件和本机领域现在已启用,除非显式禁用。

详情
文件和本机领域现在已启用,除非显式禁用。如果显式禁用,则文件和本机领域始终保持禁用状态。

以前,文件和本机领域具有以下隐式行为

  • 如果未配置文件和本机领域,则在配置任何其他领域时,它们会被隐式禁用。
  • 如果没有其他领域可用(因为领域未配置、许可证不允许或显式禁用),则会启用文件和本机领域,即使它们被显式禁用也是如此。

影响
要显式禁用文件或本机领域,请在 elasticsearch.ymlxpack.security.authc.realms 命名空间下,将相应的 file.<realm-name>.enablednative.<realm-name>.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 中出于 BWC 原因而存在。这包括

  • 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 做准备,因为该版本中已删除了 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 设置已删除。

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

影响
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 设置。传输客户端已删除,所有客户端流量现在都使用 HTTP 传输。应删除使用此设置的传输配置文件。

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

SAML realm 设置中的 nameid_format 不再具有默认值。

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

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

默认值已被删除,这意味着 Elasticsearch 默认创建的 SAML 身份验证请求不会对 IdP 提出此要求。如果要保留以前的行为,请将 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.enabled 指定为 false
  • 停止使用其他 xpack.security.transport.ssl 设置

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

例如,以下配置无效

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.enabled 指定为 false
  • 停止使用其他 xpack.security.http.ssl 设置

如果要启用 SSL,请按照 加密 HTTP 客户端通信 中的说明进行操作。作为此配置的一部分,请显式将 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" ]

并且必须配置为以下之一

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

以及安全 realm、watcher 和监控的 SSL 设置。

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

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

kibana 用户已被 kibana_system 取代。

详情
kibana 用户在历史上用于向 Elasticsearch 验证 Kibana。此用户的名称令人困惑,并且经常被错误地用于登录 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.<exporterName>.auth.password 设置已被弃用,转而使用 xpack.monitoring.exporters.<exporterName>.auth.secure_password 设置。在 Elasticsearch 8.0.0 中,xpack.monitoring.exporters.<exporterName>.auth.password 设置已被删除。

影响
使用 xpack.monitoring.exporters.<exporterName>.auth.secure_password 设置。停止使用 xpack.monitoring.exporters.<exporterName>.auth.password 设置。在 elasticsearch.yml 中指定 xpack.monitoring.exporters.<exporterName>.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 类型。

影响
无需操作。

已替换多个 transport 设置。

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

  • transport.tcp.port 替换为 transport.port
  • transport.tcp.compress 替换为 transport.compress
  • transport.tcp.connect_timeout 替换为 transport.connect_timeout
  • transport.tcp_no_delay 替换为 transport.tcp.no_delay
  • transport.profiles.profile_name.tcp_no_delay 替换为 transport.profiles.profile_name.tcp.no_delay
  • transport.profiles.profile_name.tcp_keep_alive 替换为 transport.profiles.profile_name.tcp.keep_alive
  • transport.profiles.profile_name.reuse_address 替换为 transport.profiles.profile_name.tcp.reuse_address
  • transport.profiles.profile_name.send_buffer_size 替换为 transport.profiles.profile_name.tcp.send_buffer_size
  • transport.profiles.profile_name.receive_buffer_size 替换为 transport.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.<cluster_alias>.transport.compress 时,cluster.remote.<cluster_alias>.transport.compression_scheme 设置默认为 deflate。从 8.0 开始,cluster.remote.<cluster_alias>.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 中没有显式配置密码哈希算法的节点都将无法启动。

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 设置。

命令行工具更改

编辑

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

已删除 elasticsearch-migrate 工具。

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

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

索引设置更改

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

详情
直接访问系统索引已被弃用,并且可能会在未来的版本中被阻止。如果您必须访问系统索引,请创建一个安全角色,该角色具有针对特定索引的索引权限,并将 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

response = client.indices.put_settings(
  index: 'my-index-000001',
  body: {
    'index.merge.policy.max_merge_at_once_explicit' => nil
  }
)
puts response
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 更改

编辑
在 Java 高级 REST 客户端中,indexlifecycle 包已重命名为 ilm

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

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

Fuzziness 的更改。

详情
要创建 Fuzziness 实例,请使用 fromStringfromEdits 方法,而不是以前接受字符串和数值的 build 方法。查询生成器上的几个模糊性设置器(例如,MatchQueryBuilder#fuzziness)现在仅接受 Fuzziness 实例,而不是 Object。

过去,Fuzziness 在解析任意数值时非常宽松,会默默地将其截断为三个允许的编辑距离 0、1 或 2 之一。现在已删除此宽松性,并且当尝试使用另一个值构造实例时(例如,像 1.3 这样的浮点数过去会被接受但截断为 1),该类将引发错误。

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

Repository 的更改。

详情
Repository 不再依赖 IndexShard。为了提高可测试性,restoreShard 和 snapshotShard 的约定已减少为 Store 和 MappingService。

影响
无需操作。

JVM 选项更改

编辑

如果您使用 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_builds 设置为 true 来绕过此检查。现在禁止使用此系统属性。

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

日志记录更改

编辑
Elasticsearch JSON 日志现在符合 ECS。

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

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

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

详情
Elasticsearch 不再以纯文本格式发出以下日志

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

这些日志现在仅以 JSON 格式提供。

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

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

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

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

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

映射更改

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

详情
Elasticsearch 8.0 可以读取在 7.0 或更高版本中创建的索引。如果存在在 7.0 之前的 Elasticsearch 版本中创建的索引,则 Elasticsearch 8.0 节点将不会启动。

影响
如果需要在 Elasticsearch 8.x 中继续使用,请使用 Elasticsearch 7.x 重新索引在 Elasticsearch 6.x 或更早版本中创建的索引。

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

详情
在早期版本中,即使节点具有在之前的主要版本之前创建的索引中的数据,只要这些索引是封闭的,节点也会启动。现在,Elasticsearch 确保它在启动时与每个索引(打开或关闭)兼容。

影响
如果需要在 Elasticsearch 8.x 中继续使用,请使用 Elasticsearch 7.x 重新索引在 Elasticsearch 6.x 或更早版本中创建的封闭索引。

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

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

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

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

详情
以前,可以在多字段中定义多字段。在 7.3 中已弃用定义链接的多字段,现在不再支持。

影响
要迁移映射,应删除在 fields 块中出现的所有 fields 实例,可以通过将链接的 fields 块展平为单个级别,或者在适当的情况下切换到 copy_to 来删除。

_field_names 元数据字段的 enabled 参数已删除。

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

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

字段映射上的 boost 参数已删除。

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

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

Java-time 日期格式取代 joda-time 格式。

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

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

一些 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 或 *discuss* 论坛告知我们。

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

打包更改

编辑

如果您使用 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 下载器,并且每个 ingest 节点的配置目录中未提供 geoip 数据库,则 geoip 处理器将不再执行 geoip 查找,并将使用请求的数据库不再可用的事实标记这些文档。

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

Painless 更改

编辑
JodaCompatibleZonedDateTime 类已被删除。

详情
作为从 Joda datetime 过渡到 Java datetime 的一部分,脚本使用了一个名为 JodaCompatibleZonedDateTime 的中间类。此类已被删除,并由 ZonedDateTime 取代。在脚本中,任何使用强制转换为 JodaCompatibleZonedDateTime 或使用仅在 JodaCompatibleZonedDateTime 中可用的方法调用的情况都会导致编译错误,并且可能不允许升级的节点启动。

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

以下 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

插件更改

编辑

如果您使用 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 更改

编辑
包含 _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`前缀的请求都会被重新路由到相应的 URL,而不包含 _xpack 前缀。

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

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

API 类型化 API 端点 无类型 API 端点

批量

<目标>/<类型>/_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/explore

<索引>/_graph/explore

索引

<目标>/<类型>/<_id>/_create

<目标>/_create/<_id>

<目标>/<类型>

<目标>/_doc

<目标>/<类型>/<_id>

<目标>/_doc/<_id>

多重获取

<索引>/<类型>/_mget

<索引>/_mget

多重搜索

<目标>/<类型>/_msearch

<目标>/_msearch

多重搜索模板

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

<目标>/_msearch/template

多重词向量

<索引>/<类型>/_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

8.16

8.17

6.8

Yes

Yes

Yes

No

No

No

No

No

No

No

No

No

No

No

No

No

No

No

No

No

No

7.1–7.16

Yes

Yes

Yes

No

No

No

No

No

No

No

No

No

No

No

No

No

No

No

No

No

No

7.17

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

8.0

No

No

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

8.1

No

No

No

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

8.2

No

No

No

No

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

8.3

No

No

No

No

No

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

8.4

No

No

No

No

No

No

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

8.5

No

No

No

No

No

No

No

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

8.6

No

No

No

No

No

No

No

No

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

8.7

No

No

No

No

No

No

No

No

No

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

8.8

No

No

No

No

No

No

No

No

No

No

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

8.9

No

No

No

No

No

No

No

No

No

No

No

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

8.10

No

No

No

No

No

No

No

No

No

No

No

No

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

8.11

No

No

No

No

No

No

No

No

No

No

No

No

No

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

8.12

No

No

No

No

No

No

No

No

No

No

No

No

No

No

Yes

Yes

Yes

Yes

Yes

Yes

Yes

8.13

No

No

No

No

No

No

No

No

No

No

No

No

No

No

No

Yes

Yes

Yes

Yes

Yes

Yes

8.14

No

No

No

No

No

No

No

No

No

No

No

No

No

No

No

No

Yes

Yes

Yes

Yes

Yes

8.15

No

No

No

No

No

No

No

No

No

No

No

No

No

No

No

No

No

Yes

Yes

Yes

Yes

8.16

No

No

No

No

No

No

No

No

No

No

No

No

No

No

No

No

No

No

Yes

Yes

Yes

8.17

No

No

No

No

No

No

No

No

No

No

No

No

No

No

No

No

No

No

No

Yes

Yes

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

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

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

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

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

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

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

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

terms 聚合不再支持 _term 排序键。

详情
terms 聚合不再支持 order 值中的 _term 键。要按其词条对存储桶进行排序,请改用 _key

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

兼容性
rest-api-compatibility请求时,_term 排序将被忽略,而改用 key

date_histogram 聚合不再支持 _time 排序键。

详情
date_histogram 聚合不再支持 order 值中的 _time 键。要按其键对存储桶进行排序,请改用 _key

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

兼容性
rest-api-compatibility请求时,_time 排序将被忽略,而改用 _key

moving_avg 聚合已被删除。

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

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

percentiles 聚合的 percents 参数不再支持重复值。

详情
如果您使用 percentiles 聚合指定 percents 参数,则其值必须唯一。否则,会发生异常。

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

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

详情
现在,为 date_histogram 聚合https://elastic.ac.cn/guide/en/elasticsearch/reference/8.17/search-aggregations-bucket-composite-aggregation.html#_date_histogram[composite date_histogram 源]指定 interval 参数是错误的。相反,请根据需要使用 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 分词器名称创建新索引的请求将返回错误。

在日志和诊断 API 中,in_flight_requests 统计信息已重命名为 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=...,这两个 API 允许您指定要排除的节点的名称或 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 freeze 操作现在是空操作,并且不对索引执行任何操作,因为 freeze API 端点已在 8.0 中删除。

影响
请更新您的 ILM 策略,从 cold 阶段中删除 freeze 操作。

对 ILM 策略进行额外验证。

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

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

已弃用的 _upgrade API 已被删除。

详情
以前,_upgrade API 将索引从之前的major版本升级到当前版本。现在应该使用 _reindex API 来实现此目的。

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

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

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

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

强制合并 API 的 max_num_segmentsonly_expunge_deletes 参数不能在同一请求中同时指定。

详情
以前,强制合并 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 及更高版本中的同步刷新相同的效果。

影响
请使用 刷新 API。对 /<index>/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 查询参数,并返回整个索引的统计信息。

user_agent 摄取处理器的 ecs 参数不起作用。

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

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

include_type_name 查询参数已被删除。

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

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

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

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

详情
从远程重新索引以前允许使用 URL 编码的索引名称,并且在为远程主机生成搜索请求时不会重新编码它们。此宽松政策已被删除,以便在重新索引生成远程搜索请求时,所有索引名称都将被正确编码。

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

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

详情
以前,_reindex 请求的主体中有两个不同的 size 规范

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

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

同样,为了保持 3 个接口的一致性,_delete_by_query_update_by_querysize 参数已重命名为 max_docs

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

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

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

详情
如果按查询更新 API 请求在 script 对象中包含不支持的字段,则现在将返回错误。以前,API 会静默忽略这些不支持的字段。

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

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

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

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

cat 分片 API 的 local 查询参数已被删除。

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

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

cat 索引 API 的 local 查询参数已被删除。

详情
在 7.x 版本中,GET _cat/indices API 的 ?local 参数已被弃用,在 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 查询参数。包含此参数的 get field mapping API 请求将返回错误。

向 jobs API 发送数据的 Post 方法已弃用。

详情
从 7.11.0 版本开始,机器学习 post data to jobs API 已弃用,并将在未来的主要版本中删除。

影响
请改用 datafeeds

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

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

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

当存储库正在使用时,创建和删除存储库 API 会返回 409 状态码,而不是 500

详情
当请求尝试修改正在使用的现有存储库时,创建或更新快照存储库 API删除快照存储库 API 会返回 409 状态码,而不是状态码 500

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

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

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

影响
请改用 allow_no_match

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

详情
在 7.10.0 版本中,allow_no_jobs 属性在 cat anomaly detectorsclose anomaly detection jobsget anomaly detection jobsget anomaly detection job statisticsget overall buckets API 中被弃用。

影响
请改用 allow_no_match

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

详情
以前,尝试启动已启动的汇总作业会导致 500 InternalServerError: Cannot start task for Rollup Job [job] because state was [STARTED] 异常。

现在,尝试启动已启动的作业只会返回成功的 200 OK: started 响应。

影响
请更新您的工作流程和应用程序,假设对启动汇总作业的尝试返回 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 属性。

详情
在 6.x 版本中已弃用的 nested_filternested_path 选项已被删除,转而使用 nested 上下文。

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

默认情况下,搜索和 get 请求现在使用自适应副本选择路由到分片。

详情
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 选项过去既可以接受对象形式的 boost,也可以接受数组形式的 boost。对象格式自 5.2 版本起已弃用,现在在 8.0 版本中已删除。

影响
请仅在 indices_boost 参数中使用数组值。在 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这样的四位数)误解为年份,而没有设置额外的格式,但会将其他数值解释为自 Unix 纪元以来的毫秒数。现在,我们将在没有特定 format 参数的情况下,将所有数值都视为自 Unix 纪元以来的毫秒数。如果您想查询年份,并且缺少 format,现在需要引用输入值(例如,“1984”)。

影响
如果您在查询日期字段时没有指定 format,请检查查询中的值是否实际上是指自 Unix 纪元以来的毫秒数,在这种情况下请使用数值。如果不是,请使用字符串值,该字符串值将由映射中字段上设置的日期格式或默认情况下由 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 查询的请求将返回错误。

kibana_user 角色已重命名为 kibana_admin

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

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

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

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

您不能再使用 创建 SLM 策略 API创建快照 APIindices 参数在快照中包含系统索引。要备份系统索引,请使用 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。

影响
请改用 存储库计量 API

Watcher 历史记录现在写入隐藏的数据流。

详情
在 8.x 版本中,Elasticsearch 将 Watcher 历史记录写入隐藏的 .watcher-history-<index-template-version> 数据流。以前,Elasticsearch 将 Watcher 历史记录写入隐藏的 .watcher-history-<index-template-version>-<yyyy-MM-dd> 索引。

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

如果服务器超时,集群运行状况 API 的 HTTP 状态代码已更改。

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

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

Content-Type 响应标头不再指定字符集。

详情
Content-Type 响应标头不再指定字符集。传输 JSON 数据时不需要此信息,因为 JSON 文本将始终以 Unicode 编码,默认编码为 UTF-8。

影响
某些应用程序和实用程序(例如 PowerShell 的 Invoke-RestMethod)必须接收字符集信息才能正确显示数据。如果您的应用程序或实用程序依赖于 Content-Type 响应标头中的字符集信息,则 UTF-8 编码的字符将在响应正文中错误地呈现。

作为一种解决方法,要呈现非 ASCII 字符,请在请求中包含一个 HTTP Accept 标头,指定字符集。

Accept: application/json; charset=utf-8

SQL JDBC 更改

编辑
JDBC 驱动程序以 well-known-text 字符串而不是 org.elasticsearch.geo 对象返回几何对象。

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

影响
在升级之前,请通过简单地调用 toStringorg.elasticsearch.geometry.utils.WellKnownText#toWKT/fromWKT 方法,将 Elasticsearch JDBC 驱动程序上 ResultSet#getObjectResultSet#setObject 中的任何 org.elasticsearch.geo 类替换为它们的 WKT 表示形式。

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

系统要求更改

编辑

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

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

详情
以下操作系统已达到其生命周期结束,并且 Elasticsearch 不再支持它们

  • Amazon Linux
  • CentOS 6
  • Debian 8
  • openSUSE Leap 42
  • Oracle Enterprise Linux 6
  • Ubuntu 16.04

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

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

需要 Java 17。

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

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

当以 FIPS 140-2 模式运行 Elasticsearch 8.0 时,还没有可用的 FIPS 认证的 Java 17 安全模块。如果您在 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 将被忽略。

转换更改

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

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

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

弃用

编辑

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

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

集群和节点设置弃用

编辑
我们不再建议使用瞬态集群设置。

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

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

命令行工具弃用

编辑

如果您使用 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 用户密码已配置。