go-elasticsearch: Elastic官方的Go语言客户端_语言 & 开发_张婵_InfoQ精选文章


本站和网页 https://www.infoq.cn/article/HVzMNKuYYmCkRTK-oZdp 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

go-elasticsearch: Elastic官方的Go语言客户端_语言 & 开发_张婵_InfoQ精选文章
极客时间 极客时间训练营 团队学习 高端学员 App 下载 企业会员访谈录报名首页 大会 直播 专题 电子书 话题 视频 写作社区 资讯  写点什么 创作场景记录自己日常工作的实践、心得发表对生活和职场的感悟针对感兴趣的事件发表随笔或者杂谈从 0 到 1 详细介绍你掌握的一门语言、一个技术,或者一个兴趣、爱好或者,就直接把你的个人博客、公众号直接搬到这里登录/注册 架构 开源 云计算 AI 前端 编程语言 区块链 技术管理 云原生 运维 新基建 产品 数字化转型 热点推荐  go-elasticsearch: Elastic 官方的 Go 语言客户端张婵2019-02-12本文字数:3403 字 阅读完需:约 11 分钟说明Elastic 官方鼓励在项目中尝试用这个包,但请记住以下几点:这个项目的工作还在进行中,并非所有计划的功能和 Elasticsearch 官方客户端中的标准(故障重试,节点自动发现等)都实现了。API 稳定性无法保证。 尽管公共 API 的设计非常谨慎,但它们可以根据进一步的探索和用户反馈以不兼容的方式进行更改。客户端的目标是 Elasticsearch 7.x 版本。后续将添加对 6.x 和 5.x 版本 API 的支持。安装用go get安装这个包: go get -u github.com/elastic/go-elasticsearch 复制代码 或者将这个包添加到go.mod文件: require github.com/elastic/go-elasticsearch v0.0.0 复制代码 或者克隆这个仓库: git clone https://github.com/elastic/go-elasticsearch.git && cd go-elasticsearch 复制代码 一个完整的示例: mkdir my-elasticsearch-app && cd my-elasticsearch-appcat > go.mod <<-END module my-elasticsearch-app require github.com/elastic/go-elasticsearch v0.0.0ENDcat > main.go <<-END package main import ( "log" "github.com/elastic/go-elasticsearch" ) func main() { es, _ := elasticsearch.NewDefaultClient() log.Println(es.Info()) }ENDgo run main.go 复制代码 用法elasticsearch包与另外两个包绑定在一起,esapi用于调用 Elasticsearch 的 API,estransport通过 HTTP 传输数据。使用elasticsearch.NewDefaultClient()函数创建带有以下默认设置的客户端: es, err := elasticsearch.NewDefaultClient()if err != nil { log.Fatalf("Error creating the client: %s", err)}res, err := es.Info()if err != nil { log.Fatalf("Error getting response: %s", err)}log.Println(res)// [200 OK] {// "name" : "node-1",// "cluster_name" : "go-elasticsearch"// ... 复制代码 注意:当导出ELASTICSEARCH_URL环境变量时,它将被用作集群端点。使用elasticsearch.NewClient()函数(仅用作演示)配置该客户端: cfg := elasticsearch.Config{ Addresses: []string{ "http://localhost:9200", "http://localhost:9201", }, Transport: &http.Transport{ MaxIdleConnsPerHost: 10, ResponseHeaderTimeout: time.Second, DialContext: (&net.Dialer{Timeout: time.Second}).DialContext, TLSClientConfig: &tls.Config{ MaxVersion: tls.VersionTLS11, InsecureSkipVerify: true, }, },}es, err := elasticsearch.NewClient(cfg)// ... 复制代码 下面的示例展示了更复杂的用法。它从集群中获取 Elasticsearch 版本,同时索引几个文档,并使用响应主体周围的一个轻量包装器打印搜索结果。 // $ go run _examples/main.gopackage mainimport ( "context" "encoding/json" "log" "strconv" "strings" "sync" "github.com/elastic/go-elasticsearch" "github.com/elastic/go-elasticsearch/esapi")func main() { log.SetFlags(0) var ( r map[string]interface{} wg sync.WaitGroup ) // Initialize a client with the default settings. // // An `ELASTICSEARCH_URL` environment variable will be used when exported. // es, err := elasticsearch.NewDefaultClient() if err != nil { log.Fatalf("Error creating the client: %s", err) } // 1. Get cluster info // res, err := es.Info() if err != nil { log.Fatalf("Error getting response: %s", err) } // Deserialize the response into a map. if err := json.NewDecoder(res.Body).Decode(&r); err != nil { log.Fatalf("Error parsing the response body: %s", err) } // Print version number. log.Printf("~~~~~~~> Elasticsearch %s", r["version"].(map[string]interface{})["number"]) // 2. Index documents concurrently // for i, title := range []string{"Test One", "Test Two"} { wg.Add(1) go func(i int, title string) { defer wg.Done() // Set up the request object directly. req := esapi.IndexRequest{ Index: "test", DocumentID: strconv.Itoa(i + 1), Body: strings.NewReader(`{"title" : "` + title + `"}`), Refresh: "true", } // Perform the request with the client. res, err := req.Do(context.Background(), es) if err != nil { log.Fatalf("Error getting response: %s", err) } defer res.Body.Close() if res.IsError() { log.Printf("[%s] Error indexing document ID=%d", res.Status(), i+1) } else { // Deserialize the response into a map. var r map[string]interface{} if err := json.NewDecoder(res.Body).Decode(&r); err != nil { log.Printf("Error parsing the response body: %s", err) } else { // Print the response status and indexed document version. log.Printf("[%s] %s; version=%d", res.Status(), r["result"], int(r["_version"].(float64))) } } }(i, title) } wg.Wait() log.Println(strings.Repeat("-", 37)) // 3. Search for the indexed documents // // Use the helper methods of the client. res, err = es.Search( es.Search.WithContext(context.Background()), es.Search.WithIndex("test"), es.Search.WithBody(strings.NewReader(`{"query" : { "match" : { "title" : "test" } }}`)), es.Search.WithTrackTotalHits(true), es.Search.WithPretty(), ) if err != nil { log.Fatalf("ERROR: %s", err) } defer res.Body.Close() if res.IsError() { var e map[string]interface{} if err := json.NewDecoder(res.Body).Decode(&e); err != nil { log.Fatalf("error parsing the response body: %s", err) } else { // Print the response status and error information. log.Fatalf("[%s] %s: %s", res.Status(), e["error"].(map[string]interface{})["type"], e["error"].(map[string]interface{})["reason"], ) } } if err := json.NewDecoder(res.Body).Decode(&r); err != nil { log.Fatalf("Error parsing the response body: %s", err) } // Print the response status, number of results, and request duration. log.Printf( "[%s] %d hits; took: %dms", res.Status(), int(r["hits"].(map[string]interface{})["total"].(map[string]interface{})["value"].(float64)), int(r["took"].(float64)), ) // Print the ID and document source for each hit. for _, hit := range r["hits"].(map[string]interface{})["hits"].([]interface{}) { log.Printf(" * ID=%s, %s", hit.(map[string]interface{})["_id"], hit.(map[string]interface{})["_source"]) } log.Println(strings.Repeat("=", 37))}// ~~~~~~~> Elasticsearch 7.0.0-SNAPSHOT// [200 OK] updated; version=1// [200 OK] updated; version=1// -------------------------------------// [200 OK] 2 hits; took: 7ms// * ID=1, map[title:Test One]// * ID=2, map[title:Test Two]// ===================================== 复制代码 如上述示例所示,esapi包允许通过两种不同的方式调用 Elasticsearch API:通过创建结构(如IndexRequest),并向其传递上下文和客户端来调用其Do()方法,或者通过客户端上可用的函数(如WithIndex())直接调用其上的Search()函数。更多信息请参阅包文档。estransport包处理与 Elasticsearch 之间的数据传输。 目前,这个实现只占据很小的空间:它只在已配置的集群端点上进行循环。后续将添加更多功能:重试失败的请求,忽略某些状态代码,自动发现群集中的节点等等。Examples_examples文件夹包含许多全面的示例,可帮助你上手使用客户端,包括客户端的配置和自定义,模拟单元测试的传输,将客户端嵌入自定义类型,构建查询,执行请求和解析回应。许可证遵循 Apache License 2.0 版本。参考链接:https://github.com/elastic/go-elasticsearch#go-elasticsearch划线评论复制2019-02-12 08:0015185文章版权归极客邦科技InfoQ所有,未经许可不得转载。张婵 InfoQ 技术编辑 发布了 87 篇内容, 共 49.5 次阅读, 收获喜欢 218 次。  关注 语言 & 开发社区Go 轻点一下,留下你的鼓励 评论 1 条评论 发布 MING感谢怕大家看不懂将README翻译了一次系列 o(╯□╰)o2019-08-01 10:36  0 回复没有更多了 更多内容推荐 浅析 ElasticSearch 原理 最近女主在项目中使用到ElasticSearch来做索引。但是对ElasticSearch的一些原理还是比较模糊,所以就梳理了一下ElasticSearch的基本原理,分享给大家。 云计算文化 & 方法方法论 CRISPY,一个新的远程框架 运用现有的各样各样的远程机制,通常有必要以一种支持交换/引入新协议而不会或者最少化对客户端实现造成影响的方式来构建客户端。一个新的构架-CRISPY-即提供了对这一实现的支持。 SOA架构 在 Kubernetes 上运行 Open Distro for Elasticsearch 本文提供了在 Kubernetes 上执行 Open Distro for Elasticsearch 生产级部署的逐步说明。 语言 & 开发亚马逊云科技其他 MQTT 协议:如何支持海量的在线 IoT 设备? 对于海量客户端的场景,服务端必须使用集群来支撑,可以选择收费的云服务和企业版产品。也可以选择自行来构建MQTT集群。 2019-09-24 剖析 Elasticsearch 集群系列第一篇 Elasticsearch 的存储模型和读写操作 剖析Elasticsearch集群系列涵盖了当今最流行的分布式搜索引擎Elasticsearch的底层架构和原型实例。
本文是这个系列的第一篇,在本文中,我们将讨论的Elasticsearch的底层存储模型及CRUD(创建、读取、更新和删除)操作的工作原理。 语言 & 开发架构 05|Prometheus 中有哪些关键设计? Prometheus 的关键设计 2023-01-18 Membase 公司公开发布 Membase 服务器 从今天起,企业版和社区版Membase服务器可从Membase公司(原NorthScale公司)获得。Membase公司是广泛使用的Memcached缓存基础设施的提供商。 数据库架构DevOps语言 & 开发文化 & 方法 Elasticsearch 近实时搜索 Near Real-Time Search Elasticsearch 近实时搜索 Near Real-Time Search(refresh),内容来自 B 站中华石杉 Elasticsearch 顶尖高手系列课程核心知识篇,英文内容来自 Elasticsearch: The Definitive Guide [2.x] 2021-03-13 03|架构概述:一个监控系统的典型架构是什么样的? 监控系统由哪些模块组成,各个模块是如何相互协同的 2023-01-13 客户端存储技术进展:PersistJS 的发布与 MySpace 选用 Gears 上周,Paul Duncan发布了PersistJS,它是一个能在客户端进行数据存储的JavaScript框架。本周在旧金山的Google I/O大会上,MySpace也宣布他们正在使用 Gears 进行消息搜索。有了Gears,就可以在客户端执行全文搜索。 JavaJavaScript语言 & 开发 Amazon AppSync 简介 – 使用实时和离线功能构建数据驱动型应用 在当今时代,我们几乎都会利用移动设备和应用来让我们的生活更加轻松惬意。 语言 & 开发技术管理亚马逊云科技 Elasticsearch Validate API Elasticsearch Validate API,部分内容来自 B 站中华石杉 Elasticsearch 顶尖高手系列课程核心知识篇,英文内容来自官方文档。 其中大部分内容来自官方文档,英文,TL;DR 2021-02-23 Apache 软件基金会发布 Apache Traffic Server v3.0.0 近日,Apache软件基金会发布了Apache Traffic Server v3.0.0。Apache Traffic Server是个云计算服务,可以处理云中的请求,它既可以处理静态内容(图片、JavaScript、CSS及HTML),也可以将对动态内容的请求路由给Web服务器(比如Apache HTTP Server)。 架构Apache语言 & 开发 Elasticsearch Mapping Root Object Elasticsearch Mapping Root Object,内容来自 B 站中华石杉 Elasticsearch 顶尖高手系列课程核心知识篇,英文内容来自 Elasticsearch: The Definitive Guide [2.x],在新的版本中 Mapping types have been removed。 2021-03-07 开源搜索引擎 Elasticsearch 5.0 版本正式发布 近日,Elastic在官方博客中宣布,Elasticsearch 5.0正式发布。该版本基于Lucene 6.2.0,已经在Elastic Cloud上完成了部署。据称,这是迄今为止最快、最安全、最易用的版本。 语言 & 开发架构 分布式安全:上百个分布式节点,不会出现“内奸”吗? 分布式环境中动辄就是上百台的分布式节点,你能够确定所有的节点都是可信的吗?如果某一个节点被黑客控制了,又会发生什么呢? 2020-01-20 在 Elasticsearch 中存储 Open Distro for Elasticsearch 的 Performance Analyzer 输出 Open Distro for Elasticsearch 的 Performance Analyzer 插件显示从 Elasticsearch 集群返回指标的 REST API。 语言 & 开发亚马逊云科技其他 如何搭建一个可靠的监控系统? 我以几个常见的监控系统实现方案,谈谈它们的实现原理,分别适用于什么场景,以及具体该如何做技术选型。 2018-09-25 API 风格(下):RPC API 介绍 今天,我给你介绍一种Go项目开发中常用的API风格,RPC,而且会重点介绍gRPC这一通用RPC框架。 2021-06-24发现更多内容张婵 关注 InfoQ 技术编辑最新发布 5G 场景下创新创业难?华为云 5G+X 联创营官网上线为你助力 2020-11-18 技术段子哪家强?鲲鹏吐槽大会看分晓! 2020-08-11 专访 Rancher CEO 梁胜博士:企业应该如何理解云原生 CI/CD? 2019-05-29 推荐阅读 71|Flink Client 实现原理 2020-11-26 Elasticsearch 性能监控(二) 文化 & 方法云计算方法论 一文入门 JavaScript 2022-09-15 FastMail 开源多个 JMAP 项目,助力邮件服务器和客户端开发 语言 & 开发架构 Redis:我是如何与客户端进行通信的 2021-06-23 使用 ZooKeeper 实现分布式锁 2019-08-27 用 Redis 构建缓存集群的最佳实践有哪些? 2020-04-02 电子书 腾讯大规模云原生技术实践案例集 本案例集详细阐释了 QQ、腾讯会议、和平精英、小红书、斗鱼、微盟等十多个亿级用户产品背后的大规模云原生... 立即下载 大厂实战PPT下载 换一换  网易云音乐基于 C2D2C 的无损设计协同 刘甲 | 网易云音乐 设计中台技术负责人 立即下载 企业如何通过云原生数据库实现降本增效? 窦贤明 | 腾讯云 数据库技术专家 立即下载 联易融低代码平台蜂塔网关选型 李柏 | 联易融 架构组/技术专家 立即下载 中文字体反爬,易易易易易易【Python脱敏】车车车车车车车车 梦想橡皮擦 Python 爬虫 8月月更 后台图库上传功能 CRMEB 深入解析分布式文件系统的一致性的实现 移动云大数据 分布式系统 数据同步 浅谈SVN备份 剑雪封喉 httpServer来代理WebSocket通信 ike潮 HTTP websocket web socket SocketServer ABAB-740新语法 桥下本有油菜花 SAP abap LP流动性挖矿DAPP系统开发丨流动性挖矿功能原理及说明 开发微hkkf5566 Hadoop Spark太重,esProc SPL很轻 石臻臻的杂货铺 SPL 本周四晚19:00知识赋能第4期直播丨OpenHarmony智能家居项目之设备控制实现 OpenHarmony开发者 OpenHarmony 1K字详解canal-1.1.5实时同步MySQL数据到Elasticsearch 了不起的程序猿 MySQL 数据库 程序员 Java 分布式 JS快速高效开发技巧指南(持续更新) ike潮 JavaScript nodejs Dva.js 新手入门指南 Susie喵~ dva 8月月更 TiKV & TiFlash 加速复杂业务查询丨TiFlash 应用实践 PingCAP TiDB 限流不只有计数器,带你快速了解四种经典限流算法实现 知识浅谈 8月月更 下午见!2022京东云数据库新品发布会 京东科技开发者 MySQL 数据库 云计算 安全 数据迁移 C#/VB.NET 从PDF中提取表格 在下毛毛雨 C# .net PDF 提取表格 聊天app开发——防炸麦以及节省成本的内容鉴定方法 开源直播系统源码 软件开发 语音聊天室 直播系统源码 直播源码 语音app开发 STM32+OLED显示屏制作指针式电子钟 DS小龙哥 8月月更 wallys/new product/MT7915/MT7975/4*radios/ wallys-wifi6 XDR平台架构与关键技术解析 极盾科技 网络安全 信息安全 数据安全 xdr 检测响应 微信小程序获取用户手机号码 源字节1号 微信小程序 软件开发 前端开发 后端开发 实至名归!九章云极DataCanvas公司荣获智能制造领域多项殊荣 九章云极DataCanvas 智能制造 Python 教程之输入输出(3)—— 在 Python 中从用户那里获取多个输入 海拥(haiyong.site) Python 8月月更 开源一夏 | 分享一款实用的太阳能充电电路(室内光照可用) 矜辰所致 开源 电路设计 8月月更 太阳能 促进软件开发及相关领域知识与创新的传播关于我们我要投稿合作伙伴加入我们关注我们联系我们内容投稿:editors@geekbang.com业务合作:hezuo@geekbang.com反馈投诉:feedback@geekbang.com加入我们:zhaopin@geekbang.com联系电话:010-64738142地址:北京市朝阳区叶青大厦北园InfoQ 近期会议ArchSummit全球架构师峰会 2023年3月17-18日ArchSummit全球架构师峰会 2023年4月21-22日QCon全球软件开发大会 2023年5月26-27日全球 InfoQInfoQ EnInfoQ JpInfoQ FrInfoQ Br Copyright © 2023, Geekbang Technology Ltd. All rights reserved. 极客邦控股(北京)有限公司 | 京 ICP 备 16027448 号 - 5京公网安备 11010502039052号