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

go elsaticsearch demo

  1. 安装
// elasticsearch sdk
go get -u github.com/elastic/go-elasticsearch/v7
//操作json
go get "github.com/tidwall/gjson"
go get "github.com/aquasecurity/esquery"
  1. demo
package esexampleimport ("bytes""context""encoding/json""fmt""log""strings""time""github.com/aquasecurity/esquery""github.com/elastic/go-elasticsearch/v7""github.com/elastic/go-elasticsearch/v7/esapi""github.com/gin-gonic/gin""github.com/tidwall/gjson"
)var es_client *elasticsearch.Client// 连接es
func InitEs() {cfg := elasticsearch.Config{Addresses: []string{"http://192.168.214.133:31200",},Username: "elastic",Password: "ellischen",}es_client, _ = elasticsearch.NewClient(cfg)boolquery = &esquery.BoolQuery{}
}// 列出索引
func ListIndex() {res, err := esapi.CatIndicesRequest{Format: "json"}.Do(context.Background(), es_client)if err != nil {return}defer res.Body.Close()fmt.Println(res.String())
}// 查询索引文档个数
func CalculateIndexDocCount() float64 {// res, err := esapi.CountRequest{Index: []string{"ellis"}}.Do(context.Background(), es_client)// if err != nil {// 	return 0// }// defer res.Body.Close()// var resMap map[string]interface{}// json.NewDecoder(res.Body).Decode(&resMap)// fmt.Printf("resMap: %v\n", resMap["count"])// // fmt.Printf("res.Header: %v\n", res.Header)// // fmt.Println(res.String())// return resMap["count"].(float64)r, err := es_client.Count(es_client.Count.WithIndex("ellis"))if err != nil {fmt.Printf("err: %v\n", err)}var value map[string]interface{}json.NewDecoder(r.Body).Decode(&value)return value["count"].(float64)
}// 插入一个文档
func IndexOneDocument() {//method 1// document := Ellis{Name: "haha"}// data, _ := json.Marshal(document)// req := esapi.IndexRequest{// 	Index:      "ellis",// 	DocumentID: "3",// 	Body:       strings.NewReader(string(data)),// 	Refresh:    "true",// }// res, err := req.Do(context.TODO(), es_client)// if err != nil {// 	log.Fatalf("IndexRequest ERROR: %s", err)// }// defer res.Body.Close()// if res.IsError() {// 	log.Printf("%s ERROR indexing document ID=%d", res.Status(), 3)// } else {// 	// Deserialize the response into a map.// 	var resMap map[string]interface{}// 	if err := json.NewDecoder(res.Body).Decode(&resMap); err != nil {// 		log.Printf("Error parsing the response body: %s", err)// 	} else {// 		log.Printf("\nIndexRequest() RESPONSE:")// 		// Print the response status and indexed document version.// 		fmt.Println("Status:", res.Status())// 		fmt.Println("Result:", resMap["result"])// 		fmt.Println("Version:", int(resMap["_version"].(float64)))// 		fmt.Println("resMap:", resMap)// 	}// }//method 2document := Ellis{Name: "haha"}data, _ := json.Marshal(document)r, err2 := es_client.Index("ellis", strings.NewReader(string(data)), es_client.Index.WithDocumentID("4"))if err2 != nil {fmt.Printf("err2: %v\n", err2)} else {defer r.Body.Close()var value map[string]interface{}json.NewDecoder(r.Body).Decode(&value)vv, _ := json.Marshal(value)fmt.Printf("string(vv): %v\n", string(vv))}
}// 通过ID查询
func GetByID(id string) (value any) {// method 1// r, err := esapi.GetRequest{Index: "ellis", DocumentID: id}.Do(context.Background(), es_client)// if err != nil {// 	return nil// } else {// 	defer r.Body.Close()// 	fmt.Printf("r.String(): %v\n", r.String())// 	var value interface{}// 	json.NewDecoder(r.Body).Decode(&value)// 	fmt.Printf("value: %v\n", value)// 	return value// }// method 2r, err := es_client.Get("ellis", id, es_client.Get.WithRefresh(true))if err != nil {return nil} else {defer r.Body.Close()var value map[string]interface{}json.NewDecoder(r.Body).Decode(&value)fmt.Printf("value: %v\n", value)// 将value转换成JSONvv, _ := json.Marshal(value)fmt.Printf("string(vv): %v\n", string(vv))return value}
}// 通过DSL查询
func SearchByDSL() {var buf bytes.Bufferquery := map[string]interface{}{"query": map[string]interface{}{"term": map[string]interface{}{"name": "haha",},},}if err := json.NewEncoder(&buf).Encode(query); err != nil {log.Fatalf("Error encoding query: %s", err)}// Perform the search request.res, err := es_client.Search(es_client.Search.WithContext(context.Background()),es_client.Search.WithIndex("ellis"),es_client.Search.WithBody(&buf),es_client.Search.WithTrackTotalHits(true),es_client.Search.WithPretty(),)if err != nil {log.Fatalf("Error getting response: %s", err)}defer res.Body.Close()var r map[string]interface{}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))
}// update by query
func UpdateByQuery() {var buf bytes.Bufferquery := map[string]interface{}{"query": map[string]interface{}{"term": map[string]interface{}{"name": "haha",},},"script": map[string]interface{}{"source": "ctx._source[\"name\"]=params.name","params": map[string]string{"name": "ellis",},"lang": "painless",},}if err := json.NewEncoder(&buf).Encode(query); err != nil {log.Fatalf("Error encoding query: %s", err)}es_client.UpdateByQuery([]string{"ellis"}, es_client.UpdateByQuery.WithBody(&buf))
}// 删除
func Delete() {r, err := es_client.Delete("ellis", "1", es_client.Delete.WithRefresh("true"))if err != nil {fmt.Printf("err: %v\n", err)} else {defer r.Body.Close()var value map[string]interface{}json.NewDecoder(r.Body).Decode(&value)vv, _ := json.Marshal(value)fmt.Printf("string(vv): %v\n", string(vv))}
}// search after
func SearchAfter() {query := `{"query": {"match_all": {}},"sort": [{"_id": {"order": "desc"}}],"size": 1,"search_after":["3"]}`res, err := es_client.Search(es_client.Search.WithIndex("ellis"),es_client.Search.WithBody(strings.NewReader(query)),)if err != nil {log.Fatalf("Error getting response: %s", err)}defer res.Body.Close()var r map[string]interface{}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))
}// scroll 查询
func Scroll() {query := `{"query": {"match_all": {}}}`log.Println("Scrolling the index...")log.Println(strings.Repeat("-", 80))res, err := es_client.Search(es_client.Search.WithBody(strings.NewReader(query)),es_client.Search.WithIndex("ellis"),// es_client.Search.WithSort("_doc"),es_client.Search.WithSize(1),es_client.Search.WithScroll(time.Minute),)if err != nil {fmt.Printf("err: %v\n", err)}var mapvalue map[string]interface{}json.NewDecoder(res.Body).Decode(&mapvalue)value1, _ := json.Marshal(mapvalue)jsonvalue := string(value1)defer res.Body.Close()scrollID := gjson.Get(jsonvalue, "_scroll_id").String()log.Println("ScrollID", scrollID)log.Println("IDs     ", gjson.Get(jsonvalue, "hits.hits.#._id"))log.Println(strings.Repeat("-", 80))for _, hit := range mapvalue["hits"].(map[string]interface{})["hits"].([]interface{}) {log.Printf(" * ID=%s, %s", hit.(map[string]interface{})["_id"], hit.(map[string]interface{})["_source"])}for {// Perform the scroll request and pass the scrollID and scroll duration//res, err := es_client.Scroll(es_client.Scroll.WithScrollID(scrollID), es_client.Scroll.WithScroll(time.Minute))if err != nil {log.Fatalf("Error: %s", err)}if res.IsError() {log.Fatalf("Error response: %s", res)}defer res.Body.Close()// Extract the scrollID from responsevar mapvalue map[string]interface{}json.NewDecoder(res.Body).Decode(&mapvalue)value1, _ := json.Marshal(mapvalue)jsonvalue := string(value1)scrollID = gjson.Get(jsonvalue, "_scroll_id").String()hits := gjson.Get(jsonvalue, "hits.hits")if len(hits.Array()) < 1 {log.Println("Finished scrolling")break} else {log.Println("ScrollID", scrollID)log.Println("IDs     ", gjson.Get(hits.Raw, "#._id"))log.Println(strings.Repeat("-", 80))for _, v := range hits.Array() {fmt.Printf("v.Raw: %v\n", v.Raw)}}}}var boolquery *esquery.BoolQueryfunc DynamicDSL(c *gin.Context) {var body []Dynamicerr := c.ShouldBindJSON(&body)if err != nil {fmt.Printf("err: %v\n", err)} else {if len(body) > 1 {for _, v := range body {if v.Operation == "=" {boolquery.Should(esquery.Term(v.Field, v.Value))}}boolquery.MinimumShouldMatch(1)} else {for _, v := range body {if v.Operation == "=" {boolquery.Must(esquery.Term(v.Field, v.Value))}}}}res, err := esquery.Search().Query(boolquery).Sort("_id", esquery.OrderDesc).Run(es_client, es_client.Search.WithIndex("ellis"))if err != nil {fmt.Printf("err: %v\n", err)}var value map[string]interface{}json.NewDecoder(res.Body).Decode(&value)b, _ := json.Marshal(value)stringjson := string(b)log.Println("gjson.Get(stringjson, \"hits.hits.#._id\"):\n", gjson.Get(stringjson, "hits.hits.#._id"))defer res.Body.Close()
}func SearchAfterSecond() {res, err := esquery.Search().Query(esquery.MatchAll()).Sort("_id", esquery.OrderDesc).SearchAfter("3").Size(1).Run(es_client, es_client.Search.WithIndex("ellis"))if err != nil {fmt.Printf("err: %v\n", err)}var value map[string]interface{}json.NewDecoder(res.Body).Decode(&value)b, _ := json.Marshal(value)stringjson := string(b)log.Println("gjson.Get(stringjson, \"hits.hits.#._id\"):\n", gjson.Get(stringjson, "hits.hits.#._id"))defer res.Body.Close()
}

https://pkg.go.dev/github.com/okdanta/esquery#section-readme

相关文章:

go elsaticsearch demo

安装 // elasticsearch sdk go get -u github.com/elastic/go-elasticsearch/v7 //操作json go get "github.com/tidwall/gjson" go get "github.com/aquasecurity/esquery"demo package esexampleimport ("bytes""context""en…...

小游戏分发平台如何以技术拓流?

2023年&#xff0c;小游戏的发展将受到多方面的影响&#xff0c;例如新技术的引入、参与小游戏的新玩家以及游戏市场的激烈竞争等。首先&#xff0c;新技术如虚拟现实&#xff08;VR&#xff09;、增强现实&#xff08;AR&#xff09;和机器人技术都可以带来新颖的游戏体验。其…...

力扣|找出和所对应的两数的下标

从零开始刷力扣&#xff08;bushi 题目放在这&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出和为目标值target的两个整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一…...

使用命令行创建仓库

如果你还没有任何代码&#xff0c;可以通过命令行工具创建一个全新的Git仓库并初始化到本项目仓库中。 git clone https://e.coding.net/***/neurosens.git cd neurosens echo "# neurosens" >> README.md git add README.md git commit -m "first commi…...

ESLint 中的“ space-before-function-paren ”相关报错及其解决方案

ESLint 中的“ space-before-function-paren ”相关报错及其解决方案 出现的问题及其报错&#xff1a; 在 VScode 中&#xff0c;在使用带有 ESLint 工具的项目中&#xff0c;保存会发现报错&#xff0c;并且修改好代码格式后&#xff0c;保存会发现代码格式依然出现问题&…...

docker常用中间件安装

文章目录 1、前言2、中间件安装2.1、mysql2.2、gitlab容器2.3、nacos2.4、redis2.5、xxljob2.6、zipkin2.7、sentinel2.8、seata2.8.1、获取镜像2.8.2、运行容器并获取配置 2.9、rockerMQ2.9.1、rockerMQ-namesrv2.9.2、rockerMQ-broker2.9.3、rockerMQ-console 2.10、jenkins2…...

Camunda 7.x 系列【44】修改流程实例

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo 文章目录 1. 概述2. 案例演示2.1 回退2.2 子流程2.3 多实例加签1. 概述 流程模型中,执行活动需要按…...

无频闪护眼灯哪个好?什么是无频闪

随着科技的不断发展&#xff0c;工作时使用电子设备越来越普遍,如何保护我们的眼睛不受蓝光、频闪等危害就变得极其重要了。护眼台灯&#xff0c;顾名思义就是保护眼睛的台灯&#xff0c;其工作原理是在光源处使用特殊的防蓝光灯珠&#xff0c;并通过控制电流的稳定性来达到防频…...

css网格布局

css网格布局 常用属性 display: grid; //开启网格grid-template-columns: 2fr 1fr 1fr 1fr 1fr; //设置多少列每列宽度grid-gap: 10px; // 设置表格之间间距grid-template-rows: 50px 50px 50px 50px; // 设置多少行 每行的高度grid-column : 1 //占据位置 占据1格grid-colu…...

Hadoop -HDFS常用操作指令

1.启动HDFS hadoop/sbin/start-dfs.sh2.关闭 HDFS hadoop/sbin/stop-dfs.sh3. 在HDFS中创建文件夹 #老版本 hadoop fs -mkdir -p path #新版本 hadoop dfs -mkdir -p path4.查看指定目录下内容 hadoop fs -ls [-h] [-R] path hadoop dfs -ls [-h] [-R] ptahpath 指定…...

代码随想录二刷day11

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣20. 有效的括号二、力扣1047. 删除字符串中的所有相邻重复项三、力扣150. 逆波兰表达式求值 前言 一、力扣20. 有效的括号 class Solution {public bo…...

系统架构技能之设计模式-工厂模式

一、开篇 本文主要是讲述设计模式中最经典的创建型模式-工厂模式&#xff0c;本文将会从以下几点对工厂模式进行阐述。 本文将会从上面的四个方面进行详细的讲解和说明&#xff0c;当然会的朋友可以之处我的不足之处&#xff0c;不会的朋友也请我们能够相互学习讨论。 二、摘…...

Docker的基本组成和安装

Docker的基本组成 镜像&#xff08;image&#xff09;&#xff1a; docker镜像就好比是一个模板&#xff0c;可以通过这个模板来创建容器服务&#xff0c;tomcat镜像 > run > tomcat01容器&#xff08;提供服务&#xff09; 通过这个镜像可以创建多个容器&#xff08;最…...

【python爬虫】15.Scrapy框架实战(热门职位爬取)

文章目录 前言明确目标分析过程企业排行榜的公司信息公司详情页面的招聘信息 代码实现创建项目定义item 创建和编写爬虫文件存储文件修改设置 代码实操总结 前言 上一关&#xff0c;我们学习了Scrapy框架&#xff0c;知道了Scrapy爬虫公司的结构和工作原理。 在Scrapy爬虫公司…...

Apinto 网关 V0.14 版本发布,6 大插件更新!

大家好&#xff01; 距离上次更新已经过去一段时间了&#xff0c;这段日子里我们一直在酝酿新的功能&#xff0c;本次的迭代将给大家带来 6 大插件的更新~一起来看看有哪些变化吧&#xff01; 新特性 1. 新增 额外参数v2 插件&#xff0c;支持对转发参数进行加密、拼接等操作…...

突破销售瓶颈:亚马逊卖家如何借力TikTok网红营销?

随着社交媒体的崛起&#xff0c;营销方式也在不断变革。TikTok作为一款风靡全球的短视频平台&#xff0c;吸引了数以亿计的用户&#xff0c;成为了品牌宣传和销售的新热点。对于亚马逊卖家而言&#xff0c;通过合理运用TikTok网红营销策略&#xff0c;可以有效提升产品的曝光度…...

JavaWeb之Cookie的简单使用!!!

什么是Cookie Cookie:客户端会话技术&#xff0c;将数据保存到客户端&#xff0c;以后每次请求都携带Cookie数据进行访问 Cookie 数据存放在浏览器端(客户端) 创建Cookie 1.创建Cookie Cookie cookie new Cookie("key","value"); 2.使用response响应…...

16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及Apache Hive示例(6)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…...

6.Redis-hash

hash 哈希类型中的映射关系通常称为field-value&#xff0c;⽤于区分 Redis 整体的键值对&#xff08;key-value&#xff09;&#xff0c;注意这⾥的value是指field对应的值&#xff0c;不是键&#xff08;key&#xff09;对应的值&#xff0c;请注意 value 在不同上下⽂的作⽤…...

点云从入门到精通技术详解100篇-多时相机载激光雷达人工林点云匹配及生长监测(续)

目录 多时相机载激光雷达人工林点云匹配及变化监测 3.1 技术路线 3.2 数据准备 3.3 方法...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...