发行说明
编辑发行说明
编辑8.17.0
编辑功能
编辑支持 Elasticsearch v8.17
编辑您可以在此处找到所有 API 更改。
8.16.3
编辑修复
编辑改进了对 Elasticsearch v8.16
的支持
编辑根据 Elasticsearch 规范的修复和改进更新了 TypeScript 类型。
8.16.2
编辑修复
编辑改进了对 Elasticsearch v8.16
的支持
编辑根据 Elasticsearch 规范的修复和改进更新了 TypeScript 类型。
从 npm 包中删除测试工件
编辑该项目使用的单元测试工具 Tap 最近进行了升级,并开始写入 .tap
目录。由于测试是在 CI 中 npm publish
之前运行的,因此此目录被包含在已发布的包中,从而使其大小膨胀。
8.16.1
编辑修复
编辑修复 ECMAScript 导入
编辑修复了包配置,以正确支持原生 ECMAScript import
语法。
8.16.0
编辑功能
编辑支持 Elasticsearch v8.16
编辑您可以在此处找到所有 API 更改。
在 ES|QL 助手中使用 Apache Arrow
编辑ES|QL 助手现在可以将结果作为 Apache Arrow Table
或 RecordBatchReader
返回,这使得即使响应数据大于系统的可用内存,也可以对 ES|QL 结果进行高性能计算。有关更多信息,请参阅ES|QL 助手。
修复
编辑正确将原型污染选项传递给序列化程序
编辑客户端的 disablePrototypePoisoningProtection
选项默认设置为 true
,但当设置为任何其他值时,它会被忽略,从而无法在不提供自定义序列化程序实现的情况下启用原型污染保护。
8.15.3
编辑修复
编辑改进了对 Elasticsearch v8.15
的支持
编辑根据 Elasticsearch 规范的修复和改进更新了 TypeScript 类型。
从 npm 包中删除测试工件
编辑单元测试工具 Tap 最近进行了升级,并开始写入 .tap
目录。由于测试是在 CI 中 npm publish
之前运行的,因此此目录被包含在已发布的包中,从而使其大小膨胀。
8.15.2
编辑修复
编辑改进了对 Elasticsearch v8.15
的支持
编辑根据 Elasticsearch 规范的修复和改进更新了 TypeScript 类型。
8.15.1
编辑修复
编辑改进了对 Elasticsearch v8.15
的支持
编辑根据 Elasticsearch 规范的修复和改进更新了 TypeScript 类型。
8.15.0
编辑功能
编辑支持 Elasticsearch v8.15.0
编辑您可以在此处找到所有 API 更改。
OpenTelemetry 零代码仪表化支持
编辑对于那些使用支持 OpenTelemetry Span 的可观测性服务的用户,客户端现在将自动为它发出的每个 Elasticsearch 请求生成跟踪。有关更多信息,请参阅文档。
8.14.1
编辑功能
编辑改进了对 Elasticsearch 8.14
的支持
编辑根据 Elasticsearch 规范的修复和更改更新了类型。
8.14.0
编辑功能
编辑支持 Elasticsearch v8.14.0
编辑您可以在此处找到所有 API 更改。
ES|QL 对象 API 助手
编辑添加了一个助手方法,用于解析 ES|QL 查询的响应并将其转换为对象数组。还可以提供 TypeScript 类型参数,以改善使用结果时的开发人员体验。#2238
批量助手中添加了 onSuccess
回调
编辑批量助手现在支持一个 onSuccess
回调,该回调将为每个成功的操作调用。#2199
请求重试更加友好
编辑@elastic/transport
v8.6.0 已发布,它重构了重试失败请求的时间和方式。默认情况下不再重试超时的请求,并且重试现在使用指数退避而不是立即运行。
8.13.1
编辑修复
编辑将 @elastic/transport 固定到 ~8.4.1
编辑从 ^8.4.1
切换到 ~8.4.1
确保 8.13 客户端用户无需更新到 Node.js v18+,这是 @elastic/transport
v8.5.0 设置的新要求。有关详细信息,请参阅elastic/elastic-transport-js#91。
v8.13.0 也已发布,它依赖于 @elastic/transport
的 v8.4.0 而不是 v8.4.1,这是无意的。
8.13.0
编辑功能
编辑支持 Elasticsearch v8.13.0
编辑您可以在此处找到所有 API 更改。
修复
编辑当实例化客户端时,在该客户端实例上设置的任何与连接相关的默认值(例如 requestTimeout
)如果它们是以字符串而不是 ConnectionOptions
对象的形式输入,则不会被节点继承。
8.12.3
编辑修复
编辑将 @elastic/transport 提升到 ~8.4.1
编辑从 ^8.4.1
切换到 ~8.4.1
确保 8.12 客户端用户无需更新到 Node.js v18+,这是 @elastic/transport
v8.5.0 设置的新要求。有关详细信息,请参阅elastic/elastic-transport-js#91。
8.12.2
编辑修复
编辑将 @elastic/transport
升级到 8.4.1 以解决一个错误,该错误会导致错误诊断中的数组被意外地转换为对象。
8.12.1
编辑修复
编辑当服务器的响应时间比 flushInterval 慢时,可能会达到失败状态。
8.12.0
编辑功能
编辑支持 Elasticsearch v8.12.0
编辑您可以在此处找到所有 API 更改。
8.11.1
编辑修复
编辑将 @elastic/transport 提升到 ~8.4.0
编辑从 ^8.4.0
切换到 ~8.4.0
确保 8.11 客户端用户无需更新到 Node.js v18+,这是 @elastic/transport
v8.5.0 设置的新要求。有关详细信息,请参阅elastic/elastic-transport-js#91。
8.11.0
编辑功能
编辑支持 Elasticsearch v8.11.0
编辑您可以在此处找到所有 API 更改。
@elastic/transport
版本 8.4.0 引入了增强措施,以确保编辑附加到某些 Error
对象的请求元数据。此功能主要是为了解决不使用通用序列化方法(如 JSON.stringify
、console.log
或 util.inspect
)的自定义日志记录解决方案,这些方法已经考虑在内。
有关更多信息,请参阅编辑潜在敏感数据。
8.10.1
编辑修复
编辑将 @elastic/transport 提升到 ~8.3.4
编辑从 ^8.3.4
切换到 ~8.3.4
确保 8.10 客户端用户无需更新到 Node.js v18+,这是 @elastic/transport
v8.5.0 设置的新要求。有关详细信息,请参阅elastic/elastic-transport-js#91。
8.10.0
编辑功能
编辑支持 Elasticsearch v8.10.0
编辑您可以在此处找到所有 API 更改。
8.9.2
编辑修复
编辑将 @elastic/transport 提升到 ~8.3.4
编辑从 ^8.3.4
切换到 ~8.3.4
确保 8.9 客户端用户无需更新到 Node.js v18+,这是 @elastic/transport
v8.5.0 设置的新要求。有关详细信息,请参阅elastic/elastic-transport-js#91。
8.9.1
编辑修复
编辑将 @elastic/transport
升级到最新的补丁版本,以修复一个错误,该错误可能导致在处理格式错误的 HEAD
请求时退出进程。
8.9.0
编辑功能
编辑支持 Elasticsearch v8.9.0
编辑您可以在这里找到所有的 API 更改。
在批量助手中,文档在发送到 Elasticsearch 之前无法修改。现在可以修改文档然后再发送。
修复
编辑客户端用于连接 Elasticsearch 的 user-agent
标头使用的是非标准格式,现在已得到改进。
8.8.2
编辑修复
编辑将 @elastic/transport 提升到 ~8.3.2
编辑从 ^8.3.2
切换到 ~8.3.2
确保 8.8 客户端用户不需要更新到 Node.js v18+,这是 @elastic/transport
v8.5.0 设置的新要求。有关详细信息,请参阅 elastic/elastic-transport-js#91。
8.8.1
编辑功能
编辑支持 Elasticsearch v8.8.1
编辑您可以在这里找到所有的 API 更改。
修复
编辑修复了批量助手中的一个错误,该错误会导致当包含 delete
操作的批量 HTTP 请求发生错误时,onDrop
发送回错误的 JSON 文档或对不存在的文档发送错误。
elastic-transport-js 使用的 Undici 5.5.1 在大量请求创建过多 HTTP abort
监听器时可能会导致内存泄漏。将 Undici 升级到 5.22.1 移除了内存泄漏。
8.8.0
编辑功能
编辑支持 Elasticsearch v8.8.0
编辑您可以在这里找到所有的 API 更改。
修复
编辑之前的版本包含一个错误,其中包含 body
键的旧类型的类型声明实际上并没有导入包含 body
键的类型。
8.7.3
编辑修复
编辑将 @elastic/transport 提升到 ~8.3.1
编辑从 ^8.3.1
切换到 ~8.3.1
确保 8.7 客户端用户不需要更新到 Node.js v18+,这是 @elastic/transport
v8.5.0 设置的新要求。有关详细信息,请参阅 elastic/elastic-transport-js#91。
8.7.0
编辑支持 Elasticsearch v8.7.0
编辑您可以在这里找到所有的 API 更改。
8.6.1
编辑修复
编辑将 @elastic/transport 提升到 ~8.3.1
编辑从 ^8.3.1
切换到 ~8.3.1
确保 8.6 客户端用户不需要更新到 Node.js v18+,这是 @elastic/transport
v8.5.0 设置的新要求。有关详细信息,请参阅 elastic/elastic-transport-js#91。
8.6.0
编辑已将 @elastic/transport
依赖项提升到 ~8.3.1
,以确保客户端中可以使用对 maxResponseSize
选项的修复。
支持 Elasticsearch v8.6.0
编辑您可以在这里找到所有的 API 更改。
8.5.0
编辑支持 Elasticsearch v8.5.0
编辑您可以在这里找到所有的 API 更改。
8.4.0
编辑支持 Elasticsearch v8.4.0
编辑您可以在这里找到所有的 API 更改。
8.2.1
编辑修复
编辑支持 Elasticsearch v8.2.1
编辑您可以在这里找到所有的 API 更改。
之前的版本包含一个破坏 ndjson API 的错误。我们已发布 v8.2.0-patch.1
来解决此问题。此修复与我们发布的修复相同,我们强烈建议您升级到此版本。
关闭 API 不完整,此修复完成了它们。
类型定义错误地表示了查询和正文中存在的字段的类型。
8.2.0
编辑重大更改
编辑根据我们的 Node.js 支持矩阵。
功能
编辑支持 Elasticsearch v8.2
编辑您可以在这里找到所有的 API 更改。
创建新客户端时,undefined
的 caFingerprint
不再触发 http 连接的错误。
您可以按如下方式导入完整的 TypeScript 请求和响应定义
import { estypes } from '@elastic/elasticsearch'
如果您需要带有正文的旧定义,可以执行以下操作
import { estypesWithBody } from '@elastic/elasticsearch'
修复
编辑将 hpagent 更新到最新版本 transport/#49
编辑您可以在这里找到相关的更改。
8.1.0
编辑功能
编辑支持 Elasticsearch v8.1
编辑您可以在这里找到所有的 API 更改。
现在客户端导出 SniffingTransport 类。
修复
编辑修复了批量助手上游数据集中的错误导致的内存泄漏。
清理 abort 监听器 transport/#42
编辑旧的 http 客户端没有清理 abort 监听器,这可能会导致内存泄漏。
提高 undici 性能 transport/#41
编辑改进流正文收集和保持活动超时。
8.0.0
编辑功能
编辑支持 Elasticsearch v8.0
编辑您可以在这里找到所有的 API 更改。
删除旧的 TypeScript 定义
编辑重大更改:是 | 迁移工作:中等
当前的 TypeScript 定义将从客户端中删除,新的定义(包含请求和响应定义)将默认提供。
删除回调式 API
编辑重大更改:是 | 迁移工作:大
维护两种 API 样式本身不是问题,但由于异步堆栈跟踪,它使错误处理更加复杂。迁移到完整的 promise API 将解决此问题。
// callback-style api client.search({ params }, { options }, (err, result) => { console.log(err || result) }) // promise-style api client.search({ params }, { options }) .then(console.log) .catch(console.log) // async-style (sugar syntax on top of promises) const response = await client.search({ params }, { options }) console.log(response)
如果您已经在使用 promise 风格的 API,这对您来说不会是重大更改。
删除当前的 abort API 并使用新的 AbortController 标准
编辑重大更改:是 | 迁移工作:小
旧的 abort API 对于回调来说是有意义的,但是对于 promise 来说使用起来很麻烦
// callback-style api const request = client.search({ params }, { options }, (err, result) => { console.log(err) // RequestAbortedError }) request.abort() // promise-style api const promise = client.search({ params }, { options }) promise .then(console.log) .catch(console.log) // RequestAbortedError promise.abort()
Node v12 添加了标准的 AbortController
API,它旨在与回调和 promise 良好地配合使用。
const ac = new AbortController() client.search({ params }, { signal: ac.signal }) .then(console.log) .catch(console.log) // RequestAbortedError ac.abort()
从请求中删除 body 键
编辑重大更改:是 | 迁移工作:小
由于我们现在正在开发的新类型,我们确切地知道参数应该放在哪里。客户端 API 在许多地方泄露了 HTTP 相关概念,删除它们肯定会改善 DX。
这可能是一个相当大的重大更改,因此在 8.x 生命周期中可以使用双重解决方案。(接受 body 键,而不将它们包装在 body 中,以及当前的解决方案)。
要将代码从 7.x 版本迁移,您需要移除所有端点请求中的 body
参数。例如,以下是 search
端点的示例:
// from const response = await client.search({ index: 'test', body: { query: { match_all: {} } } }) // to const response = await client.search({ index: 'test', query: { match_all: {} } })
迁移到新的独立传输层
编辑破坏性变更:是 | 迁移工作量:小到无
独立的传输层已用 TypeScript 重写,并且已经放弃了回调式 API。鉴于现在是独立的,大多数 Elasticsearch 特有的概念已被删除,客户端可能需要扩展其中的部分内容以重新引入它们。如果您没有扩展客户端的内部结构,这对您来说不会是破坏性的变更。
API 调用的返回值是 body 而不是 HTTP 相关键
编辑重大更改:是 | 迁移工作:小
客户端 API 在许多地方泄露了 HTTP 相关的概念,删除它们肯定会改善 DX(开发者体验)。客户端将公开一个新的请求特定选项,以仍然获取完整的响应详细信息。
新的行为直接返回 body
值作为响应。如果您想要 7.x 版本的响应格式,您需要在请求中添加 meta : true
。这将返回所有 HTTP 元信息,包括 body
。
例如,以下是 search
端点的示例:
// from const response = await client.search({ index: 'test', body: { query: { match_all: {} } } }) console.log(response) // { body: SearchResponse, statusCode: number, headers: object, warnings: array } // to const response = await client.search({ index: 'test', query: { match_all: {} } }) console.log(response) // SearchResponse // with a bit of TypeScript and JavaScript magic... const response = await client.search({ index: 'test', query: { match_all: {} } }, { meta: true }) console.log(response) // { body: SearchResponse, statusCode: number, headers: object, warnings: array }
使用加权连接池
编辑破坏性变更:是 | 迁移工作量:小到无
从当前的集群连接池迁移到基于权重的实现。这种新的实现提供了更好的性能,并在后台运行更少的代码,仍然可以使用旧的连接池。如果您没有扩展客户端的内部结构,这对您来说不会是破坏性的变更。
迁移到 “undici” http 客户端
编辑破坏性变更:是 | 迁移工作量:小到无
默认情况下,HTTP 客户端将不再是默认的 Node.js HTTP 客户端,而是 undici。Undici 是一个从头开始编写的全新 HTTP 客户端,它提供了大幅提升的性能,并且更好地支持 Promise。此外,它还提供了全面且可预测的错误处理。仍然可以使用旧的 HTTP 客户端。如果您没有扩展客户端的内部结构,这对您来说不会是破坏性的变更。
放弃对旧的驼峰式键的支持
编辑重大更改:是 | 迁移工作:中等
目前,每个路径或查询参数都可以用 snake_case
和 camelCase
表示。在内部,客户端会将所有内容转换为 snake_case
。这样做是为了减少从旧客户端迁移到新客户端的摩擦,但现在它不再有意义。如果您已经在使用 snake_case
键,这对您来说不会是破坏性的变更。
将 ssl
选项重命名为 tls
编辑重大更改:是 | 迁移工作:小
人们通常将其称为 tls
,此外,我们在内部使用 tls API,并且 Node.js 在所有地方都将其称为 tls。
// before const client = new Client({ node: 'https://127.0.0.1:9200', ssl: { rejectUnauthorized: false } }) // after const client = new Client({ node: 'https://127.0.0.1:9200', tls: { rejectUnauthorized: false } })
删除原型污染保护
编辑重大更改:是 | 迁移工作:小
原型污染保护非常有用,但它可能会导致大型有效负载的性能问题。在 v8 中,它将被删除,文档将展示如何使用自定义序列化器将其添加回来。
删除客户端扩展 API
编辑重大更改:是 | 迁移工作:大
现在,客户端支持整个 Elasticsearch API,并且在必要时可以使用 transport.request
方法。客户端扩展 API 没有存在的理由。
client.extend('utility.index', ({ makeRequest }) => { return function _index (params, options) { // your code } }) client.utility.index(...)
如果您没有使用客户端扩展,这对您来说不会是破坏性的变更。
迁移到 TypeScript
编辑破坏性变更:否 | 迁移工作量:无
新的独立传输层已经用 TypeScript 编写,并且客户端 v8 也完全用 TypeScript 编写是有道理的。
从类似事件发射器的接口迁移到诊断方法
编辑重大更改:是 | 迁移工作:小
目前,客户端提供了 EventEmitter
类的方法子集,v8 将附带一个 diagnostic
属性,它将是一个真正的事件发射器。
// from client.on('request', console.log) // to client.diagnostic.on('request', console.log)
从云配置中删除用户名和密码属性
编辑重大更改:是 | 迁移工作:小
云配置不支持 ApiKey 和 Bearer 身份验证,而 auth
选项支持。没有必要在云配置中保留旧的基本身份验证支持。
// before const client = new Client({ cloud: { id: '<cloud-id>', username: 'elastic', password: 'changeme' } }) // after const client = new Client({ cloud: { id: '<cloud-id>' }, auth: { username: 'elastic', password: 'changeme' } })
如果您已经在 auth
配置中传递基本身份验证选项,这对您来说不会是破坏性的变更。
调用 client.close
将拒绝新的请求
编辑一旦您调用 client.close
,之后的所有新请求都将被拒绝,并出现 NoLivingConnectionsError
错误。正在进行的请求将正常执行,除非正在进行的请求需要重试,在这种情况下它将被拒绝。
参数重命名
编辑-
ilm.delete_lifecycle
:policy
参数已重命名为name
-
ilm.get_lifecycle
:policy
参数已重命名为name
-
ilm.put_lifecycle
:policy
参数已重命名为name
-
snapshot.cleanup_repository
:repository
参数已重命名为name
-
snapshot.create_repository
:repository
参数已重命名为name
-
snapshot.delete_repository
:repository
参数已重命名为name
-
snapshot.get_repository
:repository
参数已重命名为name
-
snapshot.verify_repository
:repository
参数已重命名为name
删除蛇形命名方法
编辑v7 客户端提供了蛇形命名方法,例如 client.delete_by_query
。这不再受支持,现在仅存在驼峰命名方法。因此,可以使用 client.deleteByQuery
访问 client.delete_by_query