发行说明

编辑

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.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 更改。

修复

编辑
确保新连接继承客户端设置的默认值 #2159
编辑

在实例化客户端时,如果节点以字符串而不是 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

编辑

修复

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

修复了批量助手中的错误,该错误会导致 onDrop 在批量 HTTP 请求(包含 delete 操作)发生错误时返回错误的 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,那么这不会对您造成重大更改。

删除当前的中断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_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
移除 snake_cased 方法
编辑

v7 客户端提供了 snake_cased 方法,例如 client.delete_by_query。这不再受支持,现在只有 camelCased 方法可用。因此,可以使用 client.deleteByQuery 访问 client.delete_by_query