elastic/go-elasticsearch与olivere/elastic

在 Go 语言中,与 Elasticsearch 交互的客户端库有多种选择,其中 github.com/elastic/go-elasticsearch/v8github.com/olivere/elastic/v7 是两个常用的库。这两个库的功能和用途有一些差异,以下是它们的详细对比:


1. github.com/elastic/go-elasticsearch/v8

1.1 简介

  • 这是 Elasticsearch 官方维护的 Go 语言客户端库。
  • 它是 Elasticsearch 8.x 版本的官方客户端,支持所有的 Elasticsearch 功能。
  • 库的设计理念是尽量贴近 Elasticsearch 的 REST API,提供较低层次的 API 接口。

1.2 主要特点

  • 官方支持:由 Elasticsearch 团队维护,代码质量和文档完善。
  • 低层次 API:API 设计较为基础,接近原生 REST API,适合需要细粒度控制的场景。
  • 支持所有功能:全面支持 Elasticsearch 的所有功能,包括索引、搜索、聚合、SQL 等。
  • 性能优化:官方库在性能方面进行了优化,支持批量操作和异步请求。
  • 版本兼容性:与 Elasticsearch 的版本紧密绑定,确保兼容性。

1.3 示例代码

以下是使用 github.com/elastic/go-elasticsearch/v8 的示例:

package mainimport ("context""fmt""github.com/elastic/go-elasticsearch/v8""github.com/elastic/go-elasticsearch/v8/esapi""encoding/json"
)const ES_ADDRESS = "http://localhost:9200"func main() {// 初始化客户端es, err := elasticsearch.NewClient(elasticsearch.Config{Addresses: []string{ES_ADDRESS},})if err != nil {panic(err)}// 创建一个示例文档document := map[string]interface{}{"title":   "测试文档","content": "这是一个测试文档,用于演示 Elasticsearch 的使用。",}// 创建索引请求ctx := context.Background()req := esapi.CreateRequest{Index:      "my_index",Body:       json.Marshal(document),ReturnType: esapi.ReturnTypeJSON,}// 执行请求resp, err := req.Do(ctx, es)if err != nil {panic(err)}defer resp.Body.Close()fmt.Println("文档创建成功。")
}

2. github.com/olivere/elastic/v7

2.1 简介

  • 这是一个由第三方开发者维护的 Go 语言 Elasticsearch 客户端库。
  • 它支持 Elasticsearch 的大部分功能,并提供了一个更高层次的 API,简化了很多操作。
  • 库的设计理念是提供一个更加友好的、更高层次的 API,适合快速开发。

2.2 主要特点

  • 高层次 API:提供了更简洁、更易用的 API,隐藏了很多底层细节。
  • 支持大部分功能:涵盖了 Elasticsearch 的核心功能,包括索引、搜索、聚合等。
  • 社区支持:虽然由第三方维护,但社区活跃,文档较为完善。
  • 轻量级:相对官方库,代码量更少,依赖更少。

2.3 示例代码

以下是使用 github.com/olivere/elastic/v7 的示例:

package mainimport ("context""fmt""github.com/olivere/elastic/v7"
)const ES_ADDRESS = "http://localhost:9200"func main() {// 初始化客户端es, err := elastic.NewClient(elastic.SetURL(ES_ADDRESS))if err != nil {panic(err)}// 创建一个示例文档document := map[string]interface{}{"title":   "测试文档","content": "这是一个测试文档,用于演示 Elasticsearch 的使用。",}// 创建索引请求ctx := context.Background()_, err = es.Index().Index("my_index").BodyJson(document).Do(ctx)if err != nil {panic(err)}fmt.Println("文档创建成功。")
}

3. 对比总结

特性github.com/elastic/go-elasticsearch/v8github.com/olivere/elastic/v7
维护方官方维护第三方维护
API 设计低层次,贴近 REST API高层次,简洁易用
功能支持支持 Elasticsearch 的所有功能支持大部分核心功能
性能高性能,官方优化性能也较好,但可能稍逊官方库
复杂度API 使用较为复杂,需要更多代码API 使用简单,代码量少
文档官方文档完善社区文档较为完善
依赖依赖较多,功能更多依赖较少,轻量级
版本兼容性与 Elasticsearch 版本紧密绑定版本兼容性较好
适用场景需要细粒度控制、全功能支持的场景快速开发、核心功能即可满足的场景

4. 选择建议

  • 如果你需要

    • 全面支持 Elasticsearch 的所有功能。
    • 官方维护和支持,代码质量有保障。
    • 更加贴近底层的操作方式。
    • 高性能的需求。

    推荐使用 github.com/elastic/go-elasticsearch/v8

  • 如果你需要

    • 更简洁、更易用的 API。
    • 快速开发和Prototype。
    • lighter-weight 的客户端。

    推荐使用 github.com/olivere/elastic/v7


总结:两者各有优势,选择时可以根据项目需求、个人偏好以及对 Elasticsearch 功能的使用场景来决定。

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

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

相关文章

deepseek + kimi制作PPT

目录 一、kimi简介二、deepseek生成内容三、生成PPT四、编辑PPT 一、kimi简介 kimi是一款只能ppt生成器,擅长将文本内容生成PPT。 在这里,​​DeepSeek 负责内容生成与逻辑梳理​​,​​Kimi 优化表达与提供设计建议​​。 二、deepseek生…

【八大排序】冒泡、直接选择、直接插入、希尔、堆、归并、快速、计数排序

目录 一、排序的介绍二、排序算法的实现2.1 直接插入排序2.2 希尔排序2.3 直接选择排序2.4 堆排序2.5 冒泡排序2.6 快速排序2.7 归并排序2.8 比较排序算法的性能展示2.9 计数排序 个人主页<— 数据结构专栏<— 一、排序的介绍 我们的生活中有很多排序&#xff0c;比如像…

linux 查询目录文件大小

​ 在 Linux 系统中&#xff0c;准确地掌握目录和文件的大小对于磁盘空间管理至关重要。​本文将详细介绍如何使用 du&#xff08;disk usage&#xff09;命令逐层查看目录和文件的大小&#xff0c;并结合 sort 命令对结果进行排序&#xff0c;以便有效地识别和管理占用…

如何简单几步使用 FFmpeg 将任何音频转为 MP3?

在多媒体处理领域&#xff0c;FFmpeg 以其强大的功能和灵活性而闻名。无论是视频编辑、音频转换还是流媒体处理&#xff0c;它都是专业人士和技术爱好者的首选工具之一。在这篇文章中简鹿办公将重点介绍如何使用 FFmpeg 进行音频格式转换&#xff0c;提供一些常用的转换方式&am…

通信信号分类识别

通信信号分类识别 AlexNet网络识别InceptionV3、ResNet-18、ResNet-50网络识别 采用短时傅里叶变换将一维信号转换为二维信号&#xff0c;然后采用经典神经网络进行识别 支持识别BASK,BFSK,BPSK,QPSK,8PSK,QAM和MSK。 AlexNet网络识别 在这里插入图片描述 InceptionV3、Re…

TPshop项目-服务器环境部署(部署环境/服务,检查部署环境/服务,上传TPshop项目到服务器,配置文件的更改,安装TPshop)

目录 部署环境/服务&#xff0c;检查部署环境/服务 检查部署环境/服务 上传TPshop项目到服务器&#xff0c;配置文件的更改&#xff0c;安装TPshop 部署环境/服务&#xff0c;检查部署环境/服务 一般部署环境&#xff0c;会根据开发写的部署文档来一步一步的部署环境。 部署…

C++入门基础:命名空间,缺省参数,函数重载,输入输出

命名空间&#xff1a; C语言是基于C语言的&#xff0c;融入了面向对象编程思想&#xff0c;有了很多有用的库&#xff0c;所以接下来我们将学习C如何优化C语言的不足的。 在C/C语言实践中&#xff0c;在全局作用域中变量&#xff0c;函数&#xff0c;类会有很多&#xff0c;这…

缓存 --- Redis基本数据类型

缓存 --- Redis基本数据类型 Redis Intro5种基础数据类型 Redis Intro Redis&#xff08;Remote Dictionary Server&#xff09;是一款开源的高性能键值存储系统&#xff0c;常用于缓存、消息中间件和实时数据处理场景。以下是其核心特点、数据类型及典型使用场景&#xff1a; …

Redis命令——list

列表类型是用来存储多个有序的字符串&#xff0c;列表中的每个字符串称为元素&#xff08;element&#xff09;&#xff0c;⼀个列表最多可以存储个元素 在 Redis 中&#xff0c;可以对列表两端插入&#xff08;push&#xff09;和弹出&#xff08;pop&#xff09;&#xff0c;…

Android Jetpack Compose 状态管理解析:remember vs mutableStateOf,有啥不一样?为啥要一起用?

&#x1f331;《Jetpack Compose 状态管理解析&#xff1a;remember vs mutableStateOf&#xff0c;有啥不一样&#xff1f;为啥要一起用&#xff1f;》 在 Jetpack Compose 的世界里&#xff0c;UI 是响应式的。这意味着当状态发生变化时&#xff0c;UI 会自动重组&#xff0…

使用 PCL 和 Qt 实现点云可视化与交互

下面我将介绍如何结合点云库(PCL)和Qt框架(特别是QML)来实现点云的可视化与交互功能&#xff0c;包括高亮选择等效果。 1. 基本架构设计 首先需要建立一个结合PCL和Qt的基本架构&#xff1a; // PCLQtViewer.h #pragma once#include <QObject> #include <pcl/point…

mybatis plus打印sql日志到指定目录

1、mybatis plus打印sql日志 参考文档&#xff1a;mybatis plus打印sql日志_mybatisplus日志打印-CSDN博客 2、修改 修改InfoLevelLogger Override public void debug(String s) {// 修改这里logger.info(s);log.debug(s); } 增加&#xff1a;log.debug(s); 修改logback.x…

vue3 watch和watchEffect 的用法和区别

在 Vue 3 里&#xff0c;watch 和 watchEffect 都是用于响应式数据变化的 API&#xff0c;但它们在使用方法和应用场景上存在差异。下面详细介绍它们的用法和区别。 用法 watch watch 用于监听特定的响应式数据源&#xff0c;当数据源发生变化时&#xff0c;会执行相应的回调…

Qt中修改了UI设计文件后编译不生效问题的解决办法

复制工程过来后&#xff1a; 1、删除build文件 2、删除.user文件&#xff0c;恢复为文件最初的那样 3、执行make distclean,删除所有由先前构建过程生成的文件 4、再次打开工程&#xff0c;修改ui文件编译生效&#xff01;

EtherCAT转ProfiNet边缘计算网关配置优化:汽车制造场景下PLC与机器人协同作业案例

1.行业背景与需求分析 智能汽车焊装车间是汽车制造的核心工艺环节&#xff0c;某德国豪华品牌在其上海MEB工厂新建的焊装车间中&#xff0c;采用西门子S7-1500PLC作为ProfiNet主站&#xff0c;负责整线协调与质量追溯&#xff1b;同时部署KUKAKR1500Titan机器人&#xff08;Eth…

day46—双指针-两数之和-输入有序数组(LeetCode-167)

题目描述 给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] &#xff0c;则 1 < index1 < index2 &l…

线性代数 | 知识点整理 Ref 1

注&#xff1a;本文为 “线性代数 | 知识点整理” 相关文章合辑。 因 csdn 篇幅合并超限分篇连载&#xff0c;本篇为 Ref 1。 略作重排&#xff0c;未整理去重。 图片清晰度限于引文原状。 如有内容异常&#xff0c;请看原文。 线性代数知识汇总 Arrow 于 2016-11-27 16:27:5…

比特币的跨输入签名聚合(Cross-Input Signature Aggregation,CISA)

1. 引言 2024 年&#xff0c;人权基金会&#xff08;Human Rights Foundation&#xff0c;简称 HRF&#xff09;启动了一项研究奖学金计划&#xff0c;旨在探讨“跨输入签名聚合”&#xff08;Cross-Input Signature Aggregation&#xff0c;简称 CISA&#xff09;的潜在影响。…

3.基础开发工具

1.软件包管理器 1.1什么是软件包 • 在Linux下安装软件, ⼀个通常的办法是下载到程序的源代码, 并进⾏编译, 得到可执⾏程序. • 但是这样太⿇烦了, 于是有些⼈把⼀些常⽤的软件提前编译好, 做成软件包(可以理解成windows上 的安装程序)放在⼀个服务器上, 通过包管理器可以很…

Golang errors 包快速上手

文章目录 1.变量2.类型3.函数3.1 New3.2 Is简介函数签名核心功能示例代码使用场景注意事项小结 3.3 As简介函数签名核心功能示例代码使用场景注意事项小结 3.4 Unwrap简介函数签名核心功能使用示例使用场景注意事项小结 3.5 Join简介函数签名核心功能使用场景注意事项小结 4.小…