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 用法如下:

复制代码
s => s
.Aggregations(aggs => aggs
    .Children<CommitActivity>("name_of_child_agg", child => child
        .Aggregations(childAggs => childAggs
            .Average("average_per_child", avg => avg.Field(p => p.ConfidenceFactor))
            .Max("max_per_child", max => max.Field(p => p.ConfidenceFactor))
            .Min("min_per_child", min => min.Field(p => p.ConfidenceFactor))
        )
    )
)

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

复制代码
s => s
.Aggregations(aggs => aggs
	.Add("name_of_child_agg", agg => agg
		.Children(_ => {})
		.Aggregations(childAggs => childAggs
			.Add("average_per_child", agg => agg.Avg(avg => avg.Field(p => p.ConfidenceFactor)))
			.Add("max_per_child", agg => agg.Max(max => max.Field(p => p.ConfidenceFactor)))
			.Add("min_per_child", agg => agg.Min(min => min.Field(p => p.ConfidenceFactor)))
		)
	)
)

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

资源

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

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

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

相关推荐
ratbag6720137 小时前
当环保遇上大数据:生态环境大数据技术专业的课程侧重哪些领域?
大数据
计算机编程小央姐9 小时前
跟上大数据时代步伐:食物营养数据可视化分析系统技术前沿解析
大数据·hadoop·信息可视化·spark·django·课程设计·食物
追逐时光者9 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 54 期(2025年9.8-9.14)
后端·.net
追逐时光者9 小时前
C#/.NET/.NET Core编程技巧练习集,配套详细的文章教程讲解!
后端·.net
智数研析社10 小时前
9120 部 TMDb 高分电影数据集 | 7 列全维度指标 (评分 / 热度 / 剧情)+API 权威源 | 电影趋势分析 / 推荐系统 / NLP 建模用
大数据·人工智能·python·深度学习·数据分析·数据集·数据清洗
潘达斯奈基~10 小时前
《大数据之路1》笔记2:数据模型
大数据·笔记
寻星探路10 小时前
数据库造神计划第六天---增删改查(CRUD)(2)
java·大数据·数据库
翰林小院12 小时前
【大数据专栏】流式处理框架-Apache Fink
大数据·flink
孟意昶13 小时前
Spark专题-第一部分:Spark 核心概述(2)-Spark 应用核心组件剖析
大数据·spark·big data
一路向北North13 小时前
lucene渲染未命中最匹配的关键词和内容
搜索引擎·全文检索·lucene