当前位置: 首页 > news >正文

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 功能的使用场景来决定。

相关文章:

  • 如何建设企业级合成数据中台?架构设计、权限治理与复用机制全解
  • 通过Docker Desktop配置OpenGauss数据库的方法(详细版+图文结合)
  • 特征选择与类不平衡处理
  • ThinkPHP5 的 SQL 注入漏洞
  • 041-代码味道-大泥团模块
  • VSCode连接服务器跑深度学习代码相关问题(研0大模型学习第八天)
  • C++入门小馆: 深入string类(二)
  • Docker 基本概念与安装指南
  • [贪心_2] (含证明)将数组和减半的最少操作次数 | 最大数
  • QT 5.15 程序打包
  • 【阿里云大模型高级工程师ACP学习笔记】2.1 用大模型构建新人答疑机器人
  • Electron Demo 的快速编译与启动
  • Git 大文件使用 Git-LFS 管理,推送失败
  • SystemVerilog语法之内建数据类型
  • 【mongodb】--下载
  • windows传文件给mac, linux或者其他windows
  • 【自然语言处理与大模型】模型压缩技术之剪枝
  • C++回溯算法详解
  • Python+Word实现周报自动化的完整流程
  • Java 设计模式心法之第4篇 - 单例 (Singleton) 的正确打开方式与避坑指南
  • 湖南平江发生一起意外翻船事件,6人不幸溺亡
  • 消息人士称哈马斯愿与以色列达成长期停火
  • 朱雨玲:从前世界第一到兼职运动员,30岁后开始“玩”乒乓
  • 建投读书会·东西汇流|西风东渐中的上海营造
  • 日本长野一夜连震47次,当局呼吁警惕更大地震
  • 商务部新闻发言人就美对我海事、物流和造船等领域宣布最终措施答记者问