发行说明
编辑发行说明编辑
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 更改。
修复编辑
确保新连接继承客户端设置的默认值 #2159编辑
实例化客户端时,如果将任何与连接相关的默认值(例如 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编辑
修复编辑
将 transport 升级到 8.4.1 #2137编辑
将 @elastic/transport
升级到 8.4.1 以解决一个错误,即错误诊断中的数组被意外转换为对象。
8.12.1编辑
修复编辑
修复批量助手信号量中的挂起 #2027编辑
当服务器的响应时间慢于 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 更改。
增强对编辑潜在敏感数据的支持 #2095编辑
@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编辑
修复编辑
升级传输 #1968编辑
将 @elastic/transport
升级到最新的补丁版本,以修复 一个错误,该错误可能导致进程在处理格式错误的 HEAD
请求时退出。
8.9.0编辑
功能编辑
支持 Elasticsearch v8.9.0
编辑
您可以在 此处 找到所有 API 更改。
允许在批量帮助器的 onDocument
迭代器中覆盖文档 #1732编辑
在 批量帮助器 中,文档在发送到 Elasticsearch 之前无法修改。现在可以在发送之前 修改文档。
修复编辑
更新的 user-agent
标头 #1954编辑
客户端用于连接到 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 更改。
修复编辑
修复批量帮助器中的索引漂移错误 #1759编辑
修复了批量帮助器中的一个错误,该错误会导致在包含 delete
操作的批量 HTTP 请求出错时,onDrop
发送回错误的 JSON 文档或在不存在的文档上出错。
修复由过时的 Undici 版本导致的内存泄漏 #1902编辑
elastic-transport-js 使用的 Undici 5.5.1 在大量请求创建过多 HTTP abort
侦听器时可能会导致内存泄漏。将 Undici 升级到 5.22.1 解决了内存泄漏问题。
8.8.0编辑
功能编辑
支持 Elasticsearch v8.8.0
编辑
您可以在 此处 找到所有 API 更改。
修复编辑
修复包含 body 键的旧类型的类型声明 #1784编辑
先前版本中存在一个错误,即包含 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+ #1802编辑
@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 #1688编辑
先前版本中存在一个错误,导致 ndjson API 损坏。我们已发布 v8.2.0-patch.1
来解决此问题。此修复与我们已发布的修复相同,我们强烈建议升级到此版本。
修复节点关闭 API #1697编辑
关闭 API 不完整,此修复完成了它们。
类型:将查询键移动到正文 #1693编辑
类型定义错误地表示了查询和正文中都存在的字段类型。
8.2.0编辑
重大更改编辑
放弃 Node.js v12 #1670编辑
根据我们的 Node.js 支持矩阵。
功能编辑
支持 Elasticsearch v8.2
编辑
您可以在 此处 找到所有 API 更改。
更宽松的参数检查 #1662编辑
创建新客户端时,undefined
caFingerprint
不再会触发 http 连接错误。
更新 TypeScript 文档并导出 estypes #1675编辑
您可以按如下方式导入完整的 TypeScript 请求和响应定义
import { estypes } from '@elastic/elasticsearch'
如果您需要带有正文的旧定义,则可以执行以下操作
import { estypesWithBody } from '@elastic/elasticsearch'
修复编辑
将 hpagent 更新到最新版本 transport/#49编辑
您可以在 此处 找到相关更改。
8.1.0编辑
功能编辑
支持 Elasticsearch v8.1
编辑
您可以在 此处 找到所有 API 更改。
导出 SniffingTransport #1653编辑
现在,客户端导出 SniffingTransport 类。
修复编辑
修复上游错误时未清除 onFlushTimeout 计时器 #1616编辑
修复了由批量帮助程序上游数据集中的错误引起的内存泄漏。
清理中止侦听器 transport/#42编辑
旧的 http 客户端没有清理中止侦听器,这可能会导致内存泄漏。
提高 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,该 API 旨在与回调和 Promise 良好配合使用。
const ac = new AbortController() client.search({ params }, { signal: ac.signal }) .then(console.log) .catch(console.log) // RequestAbortedError ac.abort()
从请求中删除正文键编辑
重大更改:是 | 迁移工作量:小
由于我们现在正在开发的新类型,我们确切地知道参数应该放在哪里。客户端 API 在许多地方泄漏了与 HTTP 相关的概念,删除它们肯定会改进 DX。
这可能是一个相当大的重大更改,因此在 8.x 生命周期期间可以使用双重解决方案。(接受正文键,而无需将它们包装在正文中以及当前解决方案中)。
要从 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 调用的返回值是正文,而不是与 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
edit
重大更改:是 | 迁移工作量:小
人们通常将其称为 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 } })
移除原型污染防护edit
重大更改:是 | 迁移工作量:小
原型污染防护非常有用,但它会导致大负载的性能问题。在 v8 中它将被移除,文档将展示如何使用自定义序列化器将其添加回来。
移除客户端扩展 APIedit
重大更改:是 | 迁移工作量:大
现在客户端支持整个 Elasticsearch API,并且如果需要可以使用 transport.request
方法。客户端扩展 API 已经没有存在的理由了。
client.extend('utility.index', ({ makeRequest }) => { return function _index (params, options) { // your code } }) client.utility.index(...)
如果您没有使用客户端扩展,这对您来说不会是一个破坏性更改。
迁移到 TypeScriptedit
破坏性:否 | 迁移工作量:无
新的独立传输层已经用 TypeScript 编写,客户端 v8 也完全用 TypeScript 编写是有意义的。
从类 EventEmitter 接口迁移到诊断方法edit
重大更改:是 | 迁移工作量:小
目前,客户端提供了 EventEmitter
类的一部分方法,v8 将提供一个 diagnostic
属性,它将是一个合适的事件发射器。
// from client.on('request', console.log) // to client.diagnostic.on('request', console.log)
从云配置中移除用户名和密码属性edit
重大更改:是 | 迁移工作量:小
云配置不支持 ApiKey 和 Bearer 身份验证,而 auth
选项支持。没有必要在云配置中保留传统的 Basic 身份验证支持。
// 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
配置中传递了 Basic 身份验证选项,这对您来说不会是一个破坏性更改。
调用 client.close
将拒绝新请求edit
一旦您调用 client.close
,之后的所有新请求都将被拒绝,并显示 NoLivingConnectionsError
。正在进行的请求将正常执行,除非正在进行的请求需要重试,在这种情况下它将被拒绝。
参数重命名edit
-
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
移除蛇形命名法方法edit
v7 客户端提供了蛇形命名法方法,例如 client.delete_by_query
。这不再受支持,现在只有驼峰命名法方法可用。因此,可以使用 client.deleteByQuery
访问 client.delete_by_query