发行说明
编辑发行说明
编辑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.2
编辑功能
编辑改进对 Elasticsearch v8.15
的支持
编辑根据 Elasticsearch 规范的修复和改进更新了 TypeScript 类型。
8.15.1
编辑功能
编辑改进对 Elasticsearch v8.15
的支持
编辑根据 Elasticsearch 规范的修复和改进更新了 TypeScript 类型。
8.15.0
编辑功能
编辑支持 Elasticsearch v8.15.0
编辑您可以在 此处 找到所有 API 更改。
OpenTelemetry 零代码检测支持
编辑对于那些使用支持 OpenTelemetry 跨度的可观察性服务的用户,客户端现在将自动为其发出的每个 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 更改。
修复
编辑在实例化客户端时,如果节点以字符串而不是 ConnectionOptions
对象的形式输入,则该客户端实例上设置的任何与连接相关的默认值(例如 requestTimeout
)都不会被节点继承。
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 更改。
修复
编辑修复了批量助手中的错误,该错误会导致 onDrop
在批量 HTTP 请求(包含 delete
操作)发生错误时返回错误的 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类。
修复
编辑修复了由批量助手上游数据集中的错误引起的内存泄漏。
清理中止监听器 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,那么这不会对您造成重大更改。
删除当前的中断API并使用新的AbortController标准
编辑重大更改:是 | 迁移工作量:小
旧的中断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()
从请求中删除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调用的返回值是主体,而不是与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 客户端仍然可以使用。如果您没有扩展客户端的内部功能,这对您来说不会是重大更改。
放弃对旧的 camelCased 键的支持
编辑重大更改:是 | 迁移工作量:中等
目前,每个路径或查询参数都可以用 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
移除 snake_cased 方法
编辑v7 客户端提供了 snake_cased 方法,例如 client.delete_by_query
。这不再受支持,现在只有 camelCased 方法可用。因此,可以使用 client.deleteByQuery
访问 client.delete_by_query