Elasticsearch .NET 客户端的演变

作者:Florian Bernd

在 .NET 世界中,与 Elasticsearch 的集成长期以来一直由 NEST 库提供支持,该库作为开发人员与 Elasticsearch 强大的搜索和分析功能进行交互的强大接口。NEST 是出于对 Elasticsearch 本地 .NET 客户端的需求而诞生的,由于其丰富的功能集和无缝的集成能力,很快就受到了开发人员的欢迎。

Elasticsearch 首次提交代码后的近 14 年时间里,NEST 一直忠实地跟踪 Elasticsearch 的发布。

然而,随着 Elasticsearch 的演进,维护 NEST 复杂的代码库变得越来越困难。我们意识到需要一种更可持续的客户端开发方法,于是着手从头开始重新设计 .NET 客户端。我们花了将近一年的时间发布第一个 beta 版本,又花了一年的时间接近于支持每个单独的服务器端点。最困难的决定之一是减少库的范围,以优先考虑可维护性。

考虑到当前 Elasticsearch API 的规模,手动维护 450 多个端点和近 3000 种类型(请求、响应、查询、聚合等)已不再实际。为了确保语言客户端与 Elasticsearch 之间的一致性、准确性和及时性,现在通过共享规范自动生成 8.x 客户端和许多相关类型。这是一种在 SDK 和库(例如 Azure、AWS 和 Google Cloud Platform 的库)之间保持客户端与服务器一致性的常见解决方案。

Elasticsearch 规范是 8 年前通过从 NEST 导出类型映射而创建的,通过客户端团队的努力,我们现在可以使用相同的规范创建一个新的 .NET 客户端(以及Java、Go 等多种其他语言的客户端)。

切换到 v8 客户端 Elastic.Clients.Elasticsearch 可以访问所有 Elasticsearch 8 的新功能,还为库本身带来了许多现代化的改进,但与其前身相比,也意味着在便利功能方面的减少。一些新的核心功能包括查询语言 ES|QL、现代化的机器学习(ML)功能以及以 OpenTelemetry 兼容活动形式的改进诊断。从 8.13 版本开始,Elastic.Clients.Elasticsearch 支持几乎所有 Elasticsearch 8 的服务器特性。

随着 8.13 版本的发布,官方宣布了 NEST 的弃用。随着 Elasticsearch 过渡到 Elastic.Clients.Elasticsearch,NEST 将逐步淘汰,并在年底达到生命周期终点。强烈建议开发人员尽早开始迁移工作,以确保顺利过渡并减轻潜在的中断。采用 Elastic.Clients.Elasticsearch 不仅确保与最新服务器特性的兼容性,还可以使应用程序免受已弃用功能的影响。

一个重要的破坏性变化,例如与聚合相关。在 NEST 中,流畅的 API 用法如下:

ini 复制代码
1.  s => s
2.  .Aggregations(aggs => aggs
3.      .Children<CommitActivity>("name_of_child_agg", child => child
4.          .Aggregations(childAggs => childAggs
5.              .Average("average_per_child", avg => avg.Field(p => p.ConfidenceFactor))
6.              .Max("max_per_child", max => max.Field(p => p.ConfidenceFactor))
7.              .Min("min_per_child", min => min.Field(p => p.ConfidenceFactor))
8.          )
9.      )
10.  )

而 v8 客户端需要以下语法:

dart 复制代码
1.  s => s
2.  .Aggregations(aggs => aggs
3.  	.Add("name_of_child_agg", agg => agg
4.  		.Children(_ => {})
5.  		.Aggregations(childAggs => childAggs
6.  			.Add("average_per_child", agg => agg.Avg(avg => avg.Field(p => p.ConfidenceFactor)))
7.  			.Add("max_per_child", agg => agg.Max(max => max.Field(p => p.ConfidenceFactor)))
8.  			.Add("min_per_child", agg => agg.Min(min => min.Field(p => p.ConfidenceFactor)))
9.  		)
10.  	)
11.  )

此处提供了全面的迁移指南:迁移指南:从 NEST v7 到 .NET Client v8。

资源

准备好将 RAG 构建到你的应用程序中了吗? 想要尝试使用向量数据库的不同 LLMs?

Github 上查看我们的 LangChain、Cohere 等示例 notebooks,并参加即将开始的 Elasticsearch 工程师培训

原文:Evolution of the Elasticsearch .NET Client --- Elastic Search Labs

相关推荐
forestsea4 小时前
【Elasticsearch】分片与副本机制:优化数据存储与查询性能
大数据·elasticsearch·搜索引擎
运维&陈同学4 小时前
【Beats01】企业级日志分析系统ELK之Metricbeat与Heartbeat 监控
运维·elk·elasticsearch·云原生·kibana·heartbeat·metricbeat
INFINI Labs4 小时前
Elasticsearch filter context 的使用原理
大数据·elasticsearch·jenkins·filter·querycache
chengpei1474 小时前
Elasticsearch介绍及安装部署
elasticsearch·搜索引擎
it噩梦15 小时前
es 中 terms set 使用
大数据·elasticsearch
喝醉酒的小白18 小时前
Elasticsearch 配置文件
大数据·elasticsearch·搜索引擎
missay_nine21 小时前
Elasticsearch
大数据·elasticsearch·搜索引擎
it噩梦1 天前
深度分析 es multi_match 中most_fields、best_fields、cross_fields区别
java·elasticsearch
喝醉酒的小白1 天前
ES 集群 A 和 ES 集群 B 数据流通
大数据·elasticsearch·搜索引擎
炭烤玛卡巴卡1 天前
初学elasticsearch
大数据·学习·elasticsearch·搜索引擎