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。

资源

  • GitHub 上的 Elastic.Clients.Elasticsearch v8 客户端
  • NuGet 上的 Elastic.Clients.Elasticsearch v8 客户端

准备好将 RAG 构建到你的应用程序中了吗? 想要尝试使用向量数据库的不同 LLMs?
在 Github 上查看我们的 LangChain、Cohere 等示例 notebooks,并参加即将开始的 Elasticsearch 工程师培训!

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/821491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue-treeselect 的基本使用

vue-treeselect 的基本使用 1. 效果展示2. 安装 插件3. 引入组件4. 代码 1. 效果展示 2. 安装 插件 vue-treeselect是一个树形的下拉菜单&#xff0c;至于到底有多少节点那就要看你的数据源有多少层了&#xff0c;挺方便的。下面这个这个不用多说吧&#xff0c;下载依赖 npm in…

基本模拟概念

目标&#xff1a; 讨论模拟电子技术的基本特性 描述模拟信号 分析信号源 解释放大器的特性 1.1模拟电子学 电子学可以划分成很多的分类来研究。其中最基本的一种分类方式是将信号分成可由 二进制数字表示的数字信号和由连续变化量表示的模拟信号。数字电子学包括所有的算术 和…

MAC安装CocoaPods遇到的错误Failed to build gem native extension.

MAC安装CocoaPods遇到的错误Failed to build gem native extension. 配置flutter环境的时候报错cocoapods不可用 发现已经安装了CocoaPods&#xff0c;但是不能用 重新安装CocaPods sudo gem install cocoapods重新安装报错如下&#xff1a; 安装RVM curl -L https://get.r…

netlink_kernel_create

netlink_kernel_create 是 Linux 内核中的一个函数&#xff0c;主要用于创建 Netlink 套接字&#xff0c;以便于内核与用户空间的通信。 该函数的原型如下&#xff1a; static inline struct sock *netlink_kernel_create(struct net *net, int unit, unsigned int groups, voi…

第十一章数据仓库和商务智能10分

【数据仓库-后端&#xff0c;商务智能-前端】 基本算法&#xff1a;关联关系&#xff08;牵手-谈恋爱&#xff09;&#xff0c;集群关系&#xff08;杭州人爱吃酸甜口&#xff09;&#xff0c;决策树&#xff0c;线性回归&#xff0c;贝叶斯&#xff0c;神经网络&#xff0c;时…

力扣第18题. 四数之和

题目&#xff1a; 给定一个包含 n 个整数的数组 nums 和一个目标值 target&#xff0c;判断 nums 中是否存在四个元素 a&#xff0c;b&#xff0c;c 和 d &#xff0c;使得 a b c d 的值与 target 相等&#xff1f;找出所有满足条件且不重复的四元组。 注意&#xff1a; …

为什么说日本茶道源于中国茶文化

茶&#xff0c;始于药&#xff0c;而后为饮茶&#xff0c;始于药&#xff0c;而后为饮。在8世纪的中国&#xff0c;茶就作为一桩雅事而进入一个诗意王国。而日本则在15世纪将其尊崇为一种美的宗教——茶道。 茶道&#xff0c;是在日常染污之间&#xff0c;因由对美的倾慕而建立…

redis五种类型介绍

Redis是一种内存数据存储系统&#xff0c;它支持五种不同的数据类型&#xff1a; 1. String String是Redis中最基本的数据类型&#xff0c;它可以存储任何形式的字符串数据&#xff0c;例如普通的文本字符串&#xff0c;二进制数据或JSON格式的数据。除此之外&#xff0c;还可以…

【ARM Trace32(劳特巴赫) 使用介绍 15 -- 通过 nRESE从CPU第一条指令开始Debug】

请阅读【嵌入式开发学习必备专栏 】 文章目录 Trace32 NRESETNRESET 作用nRESET 使用介绍JTAG 特定引脚控制CPU第一条指令开始进行 debug注意事项Trace32 NRESET 在 TRACE32 系统中,nRESET 是一个非常重要的概念,它直接关联到目标系统(通常是一个微处理器或微控制器)的硬件…

快手本地生活服务商入驻方法来了!超简单

本地生活市场正如一座蕴藏丰富的金矿&#xff0c;亟待我们去挖掘其潜在的价值。在2023年这个消费市场全面回暖的年份&#xff0c;服务零售行业的增速犹如一匹黑马&#xff0c;远远超过了商品零售。据权威数据显示&#xff0c;服务零售额的增长幅度高达20%&#xff0c;比商品消费…

前端开发框架BootStrap

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl BootStrap概述 Bootstrap是一个开源的前端框架&#xff0c;它由Twitter的设计师和开发者创建并维护。Bootstrap提供了许多现成的Web组件&#xff0c;可帮助开发者快速设计和…

Spring (四) 之配置及配置文件的操作

文章目录 1、Spring 基于注解的配置基于注解的配置引入依赖包配置实体类数据访问层业务层业务层实现测试 2、Bean和Component和Configuration的区别1 Bean:2 Component:3 Configuration:总结&#xff1a; 区别Component和Configuration区别 3、Spring读取properties配置文件准备…

第一届AI Agent智能体现场开发大赛报名开启!8月上旬火热开赛~

由联想拯救者、AIGC开放社区、英特尔携手主办的“AI生成未来第二届拯救者杯OPENAIGC开发者大赛”已经正式启动&#xff0c;“2024 AI Agent极限挑战赛”作为特设专项赛道&#xff0c;也将同步于8月上旬开赛&#xff0c;参赛者将在更加紧张刺激的现场比赛中展现其技术与创造力。…

Lua中文语言编程源码-第十节,更改ltm.c 元格操作函数, 使Lua加载中文库关键词(执行诸如__索引,__新索引,__加等元表操作)

源码已经更新在CSDN的码库里&#xff1a; git clone https://gitcode.com/funsion/CLua.git 在src文件夹下的ltm.c 表格操作函数&#xff0c;此模块是C语言编写的&#xff0c;是Lua语言中的一个库文件&#xff0c;主要用来提供元表操作的功能。 该库提供了许多函数&#xff…

抖音小店新店铺起飞式玩法,这几步一定要做好,前期很重要

大家好&#xff0c;我是电商笨笨熊 进入抖音小店后不知道该怎么操作&#xff0c;不清楚如何让新店快速起店&#xff1b; 今天我们就来聊聊新店铺快速起店的几个关键步骤&#xff0c;新手玩家一定要按照流程去做。 第一步&#xff1a;店铺搭建 小店开通之后不要着急选品上架&…

OpenAI 选择东京作为其首个亚洲办事处

新办事处旨在促进与日本政府、当地企业和研究机构的合作&#xff0c;开发适合日本独特需求的人工智能工具。 之所以选择东京作为OpenAI在亚洲的第一家企业&#xff0c;是因为这里拥有全球领先的技术、致力于服务的文化和创新的社区。 "OpenAI 首席执行官 Sam Altman 解释…

MGRE环境下的ospf实验

MGRE环境下的ospf实验 一.拓扑图 二.实验步骤 1.分配各路由网段IP [R1]int g 0/0/0 [R1-GigabitEthernet0/0/0]ip address 16.0.0.1 24 [R1-GigabitEthernet0/0/0]int g 0/0/1 [R1-GigabitEthernet0/0/1]ip address 116.0.0.1 24[R2]int g 0/0/0 [R2-GigabitEthernet0/0/0]…

Docker+Uwsgi部署Django项目

在之前的文章中&#xff0c;已经给大家分享了在docker中使用django自带的命令部署项目&#xff0c;这篇文章主要讲解如何使用uwsgi部署。 1. 在Django项目的根目录下新建Dockerfile文件 #Dockerfile文件 # 使用 Python 3.9 作为基础镜像 FROM python:3.9# 设置工作目录 WORKDI…

static辨析

静态变量 局部全局非静态局部作用域&#xff0c;只在函数执行期间存在全局作用域&#xff0c;作用域为所有的源文件&#xff0c;但是在其他不包含全局变量定义的源文件中需要用extern关键字再次声明静态局部作用域&#xff0c;只被初始化一次&#xff0c;自从第一次被初始化直…

随机游走的艺术-图嵌入表示学习

图嵌入引入 机器学习算法&#xff1a; 厨师 样本集&#xff1a; 食材 只有好的食材才能做出好的饭菜 我们需要把数据变成计算机能够读懂的形式&#xff08;将数据映射成为向量&#xff09; 图嵌入概述 传统图机器学习 图表示学习 自动学习特征&#xff0c;将…