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.rhkb.cn/news/97951.html

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

相关文章

【前端】快速掌握HTML+CSS核心知识点

文章目录 1.HTML核心基础知识1.1.编写第一个HTML网页1.2.超链接a标签和路径1.3.图像img标签的用法1.4.表格table标签用法1.5.列表ul、ol、dl标签用法1.6.表单form标签用法1.7.区块标签和行内标签用法 2.CSS核心基础知识2.1.CSS标签选择器viewport布局2.2.CSS样式的几种写法2.3.…

【Linux取经路】解析环境变量,提升系统控制力

文章目录 一、进程优先级1.1 什么是优先级?1.2 为什么会有优先级?1.3 小结 二、Linux系统中的优先级2.1 查看进程优先级2.2 PRI and NI2.3 修改进程优先级2.4 进程优先级的实现原理2.5 一些名词解释 三、环境变量3.1 基本概念3.2 PATH:Linux系…

k8s 常见面试题

前段时间在这个视频中分享了 https://github.com/bregman-arie/devops-exercises 这个知识仓库。 这次继续分享里面的内容,本次主要以 k8s 相关的问题为主。 k8s 是什么,为什么企业选择使用它 k8s 是一个开源应用,给用户提供了管理、部署、扩…

Learning to Super-resolve Dynamic Scenes for Neuromorphic Spike Camera论文笔记

摘要 脉冲相机使用了“integrate and fire”机制来生成连续的脉冲流,以极高的时间分辨率来记录动态光照强度。但是极高的时间分辨率导致了受限的空间分辨率,致使重建出的图像无法很好保留原始场景的细节。为了解决这个问题,这篇文章提出了Sp…

idea2023 springboot2.7.5+mybatisplus3.5.2+jsp 初学单表增删改查

创建项目 修改pom.xml 为2.7.5 引入mybatisplus 2.1 修改pom.xml <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency><!--mysq…

【STM32 学习】电源解析(VCC、VDD、VREF+、VBAT)

VCC电源电压GND电源供电负电压&#xff08;通常接地&#xff09;VDD模块工作正电压VSS模块工作负电压VREFADC参考正电压VREF-ADC参考负电压VBAT电池或其他电源供电VDDA模拟供电正电压VSSA模拟供电负电压 一、VCC&#xff08;供电电压&#xff09; VCC是指芯片的电源电压&#…

MNIST手写数字数据集+7000张图片下载

MNIST手写数字图像数据集是一个经典的用于图像分类任务的数据集&#xff0c;其中包含了大量的手写数字图像样本 数据集点击下载&#xff1a; MNIST手写数字数据集7000张图片.rar

函数栈帧理解

本文是从汇编角度来展示的函数调用&#xff0c;而且是在vs2013下根据调试展开的探究&#xff0c;其它平台在一些指令上会有点不同&#xff0c;指令不多&#xff0c;简单记忆一下即可&#xff0c;在我前些年的学习中&#xff0c;学的这几句汇编指令对我调试找错误起了不小的作用…

【令牌桶算法与漏桶算法】

&#x1f4a7; 令牌桶算法与漏桶算法 \color{#FF1493}{令牌桶算法与漏桶算法} 令牌桶算法与漏桶算法&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&#x1f390; &#x1f433; 《数据结构与算法》专…

【前端|JS实战第1篇】使用JS来实现属于自己的贪吃蛇游戏!

前言 贪吃蛇游戏是经典的小游戏&#xff0c;也是学习前端JS的一个很好的练习项目。在本教程中&#xff0c;我们将使用 JavaScript 来逐步构建一个贪吃蛇游戏。我们会从创建游戏区域开始&#xff0c;逐步添加蛇的移动、食物的生成以及游戏逻辑等功能。 &#x1f680; 作者简介&a…

韦东山-电子量产工具项目:业务系统

代码结构 所有代码都已通过测试跑通&#xff0c;其中代码结构如下&#xff1a; 一、include文件夹 1.1 common.h #ifndef _COMMON_H #define _COMMON_Htypedef struct Region {int iLeftUpX; //区域左上方的坐标int iLeftUpY; //区域左下方的坐标int iWidth; //区域宽…

java八股文面试[java基础]——String StringBuilder StringBuffer

String类型定义&#xff1a; final String 不可以继承 final char [] 不可以修改 String不可变的好处&#xff1a; hash值只需要算一次&#xff0c;当String作为map的key时&#xff0c; 不需要考虑hash改变 天然的线程安全 知识来源&#xff1a; 【基础】String、StringB…

Python web实战之细说 Django 的单元测试

关键词&#xff1a; Python Web 开发、Django、单元测试、测试驱动开发、TDD、测试框架、持续集成、自动化测试 大家好&#xff0c;今天&#xff0c;我将带领大家进入 Python Web 开发的新世界&#xff0c;深入探讨 Django 的单元测试。通过本文的实战案例和详细讲解&#xff…

ubuntu安装Microsoft Edge并设置为中文

1、下载 edge.deb 版本并安装 sudo dpkg -i microsoft-edg.deb 2. 设置默认中文显示 如果是通过.deb方式安装的&#xff1a; 打开默认安装路径下的microsoft-edge-dev文件&#xff0c;在文件最开头加上: export LANGUAGEZH-CN.UTF-8 &#xff0c;保存退出。 cd /opt/micr…

PHP8的字符串操作3-PHP8知识详解

今天继续分享字符串的操作&#xff0c;前面说到了字符串的去除空格和特殊字符&#xff0c;获取字符串的长度&#xff0c;截取字符串、检索字符串。 今天继续分享字符串的其他操作。如&#xff1a;替换字符串、分割和合成字符串。 5、替换字符串 替换字符串就是对指定字符串中…

【算法系列篇】滑动窗口

文章目录 前言什么是滑动窗口1.长度最小的子数组1.1 题目要求1.2 做题思路 1.3 Java代码实现2.无重复字符的最长子串2.1 题目要求2.2 做题思路2.3 Java代码实现 3.最大连续1的个数 III3.1 题目要求3.2 做题思路3.3 Java代码实现 4.将x减到0的最小操作数4.1 题目要求4.2 做题思路…

【仿写框架之仿写Tomact】四、封装HttpRequest对象(属性映射http请求报文)、HttpResponse对象(属性映射http响应报文)

文章目录 1、创建HttpRequest对象2、创建HttpResponse对象 1、创建HttpRequest对象 HttpRequest对象中的属性与HTTP协议中的内容对应&#xff0c;用于后序servlet从request中获取请求中的参数。 参照http请求报文&#xff1a; import java.io.BufferedReader; import java…

配置使用Gitee账号认证登录Grafana

三方社会化身份源 集成gitee第三方登录 第三方登录的原理 所谓第三方登录&#xff0c;实质就是 OAuth 授权。用户想要登录 A 网站&#xff0c;A 网站让用户提供第三方网站的数据&#xff0c;证明自己的身份。获取第三方网站的身份数据&#xff0c;就需要 OAuth 授权。 举例来…

ubuntu上使用osg3.2+osgearth2.9

一、介绍 在ubuntu上使用osgearth加载三维数字地球&#xff0c;首先要有osg和osgearth的库&#xff0c;这些可以直接使用apt-get下载安装&#xff0c;但是版本有些老&#xff0c;如果需要新版本的就需要自己编译。 #查看现有版本 sudo apt-cache madison openscenegraph #安装…

Python写一个创意五子棋游戏

前言 在本教程中&#xff0c;我们将使用Python写一个创意五子棋游戏 &#x1f4dd;个人主页→数据挖掘博主ZTLJQ的主页 个人推荐python学习系列&#xff1a; ☄️爬虫JS逆向系列专栏 - 爬虫逆向教学 ☄️python系列专栏 - 从零开始学python 首先 GomokuGame 类的构造函数 __ini…