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

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

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

2023年目标检测研究进展

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

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

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

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

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

数据库结构差异对比工具

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

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

问题解决:需要设置Runtimes:nvidia的同时设置Default Runtimenvidia

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

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

go语言中channel类型

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

第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,简称OOP),在面向对象的世界里,一切皆为对象。 面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。 以面向对象方式来进行处理,就…

CentOS 7重置root密码

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

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

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

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

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

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

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

Linux Shell如果ping失败就重启网卡(详解)

直接上脚本 -------------------------------------------------------------------------- #vi /tmp/ping_check.sh #!/bin/bash IP="1.1.1.1" PacketLoss=`ping -c 4 -w 4 1.1.1.1 | grep packet loss | awk -F packet loss {print $1} | awk {print $NF}|se…

YOLOX算法调试记录

YOLOX是在YOLOv3基础上改进而来,具有与YOLOv5相媲美的性能,其模型结构如下: 由于博主只是要用YOLOX做对比试验,因此并不需要对模型的结构太过了解。 先前博主调试过YOLOv5,YOLOv7,YOLOv8,相比而言,YOLOX的环…

人工智能与云计算实训室建设方案

一、 人工智能与云计算系统概述 人工智能(Artificial Intelligence,简称AI)是一种模拟人类智能的科学和工程,通过使用计算机系统来模拟、扩展和增强人类的智能能力。人工智能涉及多个领域,包括机器学习、深度学习、自然…

css 文字排版-平铺

序: 1、表格的宽度要有!!!!! 2、容器不能是display:inline 3、扩展---》node全栈框架 代码 text-align-last: justify; width: 70px; display: inline-block; 主要是用于表单左侧文字排序!

H5: div与textarea输入框的交互(聚焦、失去焦点、键盘收起)

简介 本文是基于 VUE3TS 的代码说明。 记录自己遇到的 div 与 textarea 输入框交互的聚焦、失去焦点、键盘收起、表情插入不失去焦点的需求实现。 需求分析 1.固定在页面底部; 2.默认显示纯文字与发送图标按钮,文字超出的省略显示; 3.点击…