go es实例

go es实例

1、下载第三方库

go get github.com/olivere/elastic

下载过程中出现如下报错:
在这里插入图片描述
解决方案:
在这里插入图片描述

2、示例

  • import
package mainimport ("context""encoding/json""fmt""reflect""time""github.com/olivere/elastic"
)
  • es中用于序列化/反序列化数据的结构

json中字段若有omitempty标记,则这个字段为空时,json序列化为string时不会包含该字段。

type Tweet struct {User     string                `json:"user"`Message  string                `json:"message"`Retweets int                   `json:"retweets"`Image    string                `json:"image,omitempty"`Created  time.Time             `json:"created,omitempty"`Tags     []string              `json:"tags,omitempty"`Location string                `json:"location,omitempty"`Suggest  *elastic.SuggestField `json:"suggest_field,omitempty"`
}
const mapping = `
{"settings":{"number_of_shards": 1,"number_of_replicas": 0},"mappings":{"tweet":{"properties":{"user":{"type":"keyword"},"message":{"type":"text","store": true,"fielddata": true},"image":{"type":"keyword"},"created":{"type":"date"},"tags":{"type":"keyword"},"location":{"type":"geo_point"},"suggest_field":{"type":"completion"}}}}
}`
func main(){//从elastic.v5开始,必须传递ctx上下文来执行每个服务ctx := context.Background()//获取客户端连接到es默认安装地址127.0.0.1:9200client, err := elastic.NewClient()if err != nil {// Handle errorpanic(err)}//Ping es服务去获取版本号if err != nil {// Handle errorpanic(err)}fmt.Printf("Elasticsearch returned with code %d and version %s\n", code, info.Version.Number)//获取es版本号的快捷方式esversion, err := client.ElasticsearchVersion("http://127.0.0.1:9200")if err != nil {// Handle errorpanic(err)}fmt.Printf("Elasticsearch version %s\n", esversion)//使用IndexExists服务检查指定索引是否存在exists, err := client.IndexExists("twitter").Do(ctx)if err != nil {// Handle errorpanic(err)}if !exists {// Create a new index.createIndex, err := client.CreateIndex("twitter").BodyString(mapping).Do(ctx)if err != nil {// Handle errorpanic(err)}if !createIndex.Acknowledged {// Not acknowledged}}//索引tweet(使用JSON序列化)tweet1 := Tweet{User: "olivere", Message: "Take Five", Retweets: 0}put1, err := client.Index().Index("twitter").Type("tweet").Id("1").BodyJson(tweet1).Do(ctx)if err != nil {// Handle errorpanic(err)}fmt.Printf("Indexed tweet %s to index %s, type %s\n", put1.Id, put1.Index, put1.Type)//索引第二条推文(按字符串)tweet2 := `{"user" : "olivere", "message" : "It's a Raggy Waltz"}`put2, err := client.Index().Index("twitter").Type("tweet").Id("2").BodyString(tweet2).Do(ctx)if err != nil {// Handle errorpanic(err)}fmt.Printf("Indexed tweet %s to index %s, type %s\n", put2.Id, put2.Index, put2.Type)//通过指定ID获取推文get1, err := client.Get().Index("twitter").Type("tweet").Id("1").Do(ctx)if err != nil {// Handle errorpanic(err)}if get1.Found {fmt.Printf("Got document %s in version %d from index %s, type %s\n", get1.Id, get1.Version, get1.Index, get1.Type)}//刷新确保文档已经写好_, err = client.Flush().Index("twitter").Do(ctx)if err != nil {panic(err)}//使用term查询语句进行搜索termQuery := elastic.NewTermQuery("user", "olivere")searchResult, err := client.Search().Index("twitter").   // 在索引"twitter"中搜索Query(termQuery).   // 指定查询Sort("user", true). // 按"user"字段升序排序From(0).Size(10).   // take documents 0-9Pretty(true).       // pretty print request and response JSONDo(ctx)             // 执行请求if err != nil {// Handle errorpanic(err)}//searchResilt是SearchRusult类型,返回hits、suggestions和所有来自es的其他信息fmt.Printf("Query took %d milliseconds\n", searchResult.TookInMillis)//Each是一个方便的函数,迭代搜索结果中的hits//它确保你不需要去检查响应中的nil值//但是,它忽略序列化中的错误,如果你想完全控制遍历hits,见如下代码:var ttyp Tweet//reflect.TypeOf()用来动态获取输入参数接口中的值的类型,如果接口为空返回nil。实际就是获取interface{}的pair中的typefor _, item := range searchResult.Each(reflect.TypeOf(ttyp)) {if t, ok := item.(Tweet); ok {fmt.Printf("Tweet by %s: %s\n", t.User, t.Message)}}//TotalHits是另一个遍历函数,即使出现问题也能正常工作fmt.Printf("Found a total of %d tweets\n", searchResult.TotalHits())//在完全控制每个步骤的情况下迭代结果if searchResult.Hits.TotalHits > 0 {fmt.Printf("Found a total of %d tweets\n", searchResult.Hits.TotalHits)// 遍历结果for _, hit := range searchResult.Hits.Hits {// hit.Index 包含索引的名称// 反序列化 hit.Source到一个Tweet (也可以只是一个map[string]interface{}).var t Tweeterr := json.Unmarshal(*hit.Source, &t)if err != nil {// Deserialization failed}// Work with tweetfmt.Printf("Tweet by %s: %s\n", t.User, t.Message)}} else {// No hitsfmt.Print("Found no tweets\n")}//通过es的Update API更新tweet//增加retweets的数量update, err := client.Update().Index("twitter").Type("tweet").Id("1").Script(elastic.NewScriptInline("ctx._source.retweets += params.num").Lang("painless").Param("num", 1)).Upsert(map[string]interface{}{"retweets": 0}).Do(ctx)if err != nil {// Handle errorpanic(err)}fmt.Printf("New version of tweet %q is now %d\n", update.Id, update.Version)//删除一个indexdeleteIndex, err := client.DeleteIndex("twitter").Do(ctx)if err != nil {// Handle errorpanic(err)}if !deleteIndex.Acknowledged {// Not acknowledged}	
}

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

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

相关文章

LabVIEW模拟化学反应器的工作

LabVIEW模拟化学反应器的工作 近年来,化学反应器在化学和工业过程领域有许多应用。高价值产品是通过混合产品,化学反应,蒸馏和结晶等多种工业过程转换原材料制成的。化学反应器通常用于大型加工行业,例如酿酒厂公司饮料产品的发酵…

微信小程序中如何动态添加 class 属性

在微信小程序中,你可以使用setData方法来动态添加class。首先,在你的页面的js文件中,定义一个变量来存储需要动态添加的class,例如: data: {dynamicClass: }然后,在需要动态添加class的地方,使…

list元素

列表元素 列表元素分为有序列表和无序列表 有序列表 ol – order list – 有序列表 li – list item – 列表元素 <ol type"1"><li>有序列表1</li><li>有序列表2</li><li>有序列表3</li> </ol>属性 type type属…

提示词4大经典框架;将AI融入动画工作流的案例和实践经验;构建基于LLM的系统和产品的模式;提示工程的艺术 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 高效提示词的4大经典框架&#xff1a;ICIO、CRISPE、BROKE、RASCEF ICIO 框架 Intruction (任务) &#xff1a;你希望AI去做的任务&am…

2023年目标检测研究进展

综述 首先关于写这个笔记&#xff0c;我个人思考了很久关于以下几点。1&#xff1a;19年开始从做OCR用到图像和文本这种多模态联合处理的后&#xff0c;也就有意识的开始关注自然语言处理&#xff0c;这样的结果导致可能停留在前期图像上的学习和实践&#xff0c;停滞的研究如…

微服务中间件--Ribbon负载均衡

Ribbon负载均衡 a.Ribbon负载均衡原理b.Ribbon负载均衡策略 (IRule)c.Ribbon的饥饿加载 a.Ribbon负载均衡原理 1.发起请求http://userservice/user/1&#xff0c;Ribbon拦截该请求 2.Ribbon通过EurekaServer拉取userservice 3.EurekaServer返回服务列表给Ribbon做负载均衡 …

bug记录:微信小程序 给button使用all: initial重置样式

场景&#xff1a;通过uniapp开发微信小程序 &#xff0c;使用uview的u-popup弹窗&#xff0c;里面内嵌了一个原生button标签&#xff0c;因为微信小程序的button是有默认样式的&#xff0c;所以通过all: initial重置样式 。但是整个弹窗的点击事件都会被button上面的点击事件覆…

数据库结构差异对比工具

简介 前几年写了一个数据库对比工具&#xff0c;但是由于实现方式的原因&#xff0c;数据库支持有限&#xff0c;所以重新设计了一下&#xff0c;便于支持多种数据库&#xff0c;并且更新了UI。 新版地址&#xff1a;https://gitee.com/xgpxg/db-diff 旧版地址&#xff1a;h…

[K8s]问题描述:k8s拉起来的容器少了cuda的so文件

问题解决&#xff1a;需要设置Runtimes&#xff1a;nvidia的同时设置Default Runtimenvidia

NVIDIA Jetson 项目:机器人足球比赛

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可二次编辑器的3D应用场景 事实上&#xff0c;整个比赛都致力于这个想法。RoboCup小型联盟&#xff08;SSL&#xff09;视觉停电技术挑战赛鼓励团队“探索本地传感和处理&#xff0c;而不是非车载计算机和全球摄像机感知环境的…

go语言中channel类型

目录 一、什么是channel 二、为什么要有channel 三、channel操作使用 初始化 操作 单向channel 双向channel&#xff0c;可读可写 四、close下什么场景会出现panic 五、总结 一、什么是channel Channels are a typed conduit through which you can send and receive …

C# --- Struct and Record

C# --- Struct and Record StructRecord Struct struct是一种数据类型, 和class非常类似, 主要有以下的不同 struct是value type, class是reference type 因为是value type所以strcut不是必须储存在heap上struct不能等于null, The default value for a struct is an empty inst…

第6步---MySQL的控制流语句和窗口函数

第6步---MySQL的控制流语句和窗口函数 1.IF关键字 -- 控制流语句 SELECT IF(5>3,大于,小于);-- 会单独生成一列的 SELECT *,IF(score >90 , 优秀, 一般) 等级 FROM stu_score;-- IFNULL(expr1,expr2) SELECT id,name ,IFNULL(salary,0),dept_id FROM emp4;-- ISNULL() …

Java-类与对象(上)

什么是面向对象 Java是一门纯面向对象的语言(Object Oriented Program&#xff0c;简称OOP)&#xff0c;在面向对象的世界里&#xff0c;一切皆为对象。 面向对象是解决问题的一种思想&#xff0c;主要依靠对象之间的交互完成一件事情。 以面向对象方式来进行处理&#xff0c;就…

第6章 分布式文件存储

mini商城第6章 分布式文件存储 一、课题 分布式文件存储 二、回顾 1、理解Oauth2.0的功能作模式 2、实现mini商城项目的权限登录 三、目标 1、了解文件存储系统的概念 2、了解常用文件服务器的区别 3、掌握Minio的应用 四、内容 第1章 MinIO简介 官

CentOS 7重置root密码

CentOS 7 如何找回被您 遗忘得 root密码呢&#xff1f; 步骤如下&#xff1a; 步骤一&#xff1a;在开机出现如下界面的时候就按“e”键 步骤二&#xff1a;在步骤一按下”e”键之后&#xff0c;出现如下界面&#xff0c;按 ↓键一直到底部找到“LANGzh_CN.UTF-8”这句&…

【物联网无线通信技术】NFC从理论到实践(FM17XX)

NFC&#xff0c;全称是Near Field Communication&#xff0c;即“近场通信”&#xff0c;也叫“近距离无线通信”。NFC诞生于2004年&#xff0c;是基于RFID非接触式射频识别技术演变而来&#xff0c;由当时的龙头企业NXP(原飞利浦半导体)、诺基亚以及索尼联合发起。NFC采用13.5…

Excel VBA 复制除指定工作表外所有的工作表的内容到一张工作表中

当我们有一张表里面有很多sheet 具有相同的表结构&#xff0c;如果需要汇总到一张表中&#xff0c;那么我们可以借助VBA 去实现汇总自动化 Sub 复制所有工作表内容()Dim ws As WorksheetDim targetSheet As WorksheetDim lastRow As Long 设置目标表格&#xff0c;即要将所有…

XXL-JOB任务调度中心后台命令执行漏洞

漏洞描述 XXL-JOB任务调度中心后台存在命令执行漏洞,攻击者可在后台通过写入shell命令任务调度获取服务器控制权限 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益,未经授权…

ui设计需要学编程吗难不难学习 优漫动游

ui设计需要学编程吗难不难学习&#xff0c;对于基础小白来说学习编程确实有一定难度&#xff0c;所以很想知道零基础学习ui设计需要学编程吗&#xff0c;需不需要写代码呢&#xff0c;这些问题小编来简单的分析分析解决零基础小白的一些困惑&#xff0c;希望对你有帮助。 ui…