发行说明

编辑

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 TableRecordBatchReader 返回,这使得即使响应数据大于系统的可用内存,也可以对 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 更改。

修复

编辑
确保新连接继承客户端设置的默认值 #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

编辑

修复

编辑
将传输升级到 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.stringifyconsole.logutil.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
编辑

创建新客户端时,undefinedcaFingerprint 不再触发 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
编辑

修复了批量助手上游数据集中的错误导致的内存泄漏。

清理 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_casecamelCase 表示。在内部,客户端会将所有内容转换为 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_lifecyclepolicy 参数已重命名为 name
  • ilm.get_lifecyclepolicy 参数已重命名为 name
  • ilm.put_lifecyclepolicy 参数已重命名为 name
  • snapshot.cleanup_repositoryrepository 参数已重命名为 name
  • snapshot.create_repositoryrepository 参数已重命名为 name
  • snapshot.delete_repositoryrepository 参数已重命名为 name
  • snapshot.get_repositoryrepository 参数已重命名为 name
  • snapshot.verify_repositoryrepository 参数已重命名为 name
删除蛇形命名方法
编辑

v7 客户端提供了蛇形命名方法,例如 client.delete_by_query。这不再受支持,现在仅存在驼峰命名方法。因此,可以使用 client.deleteByQuery 访问 client.delete_by_query