go elasticsearch 测试实例


// 查询列表数据
func QueryOperateList(ctx context.Context, esClient *elastic.Client, index string, pageNum, pageSize int, start, end int64, execSql string, list []interface{}, operateAccount string, operateAddr string, maxRows, minRows int, dbAddr, namespace string, execResult string) (*message.OperateLogListResp, error) {boolQuery := elastic.NewBoolQuery().Must()if start > 0 && end > 0 && end > start {rangeQuery := elastic.NewRangeQuery("timestamp").Gt(start).Lt(end)boolQuery.Must(rangeQuery)}if len(execSql) > 0 {//execSqlMatchQuery := elastic.NewWildcardQuery("executeStatement", "*"+execSql+"*")//execSqlMatchQuery := elastic.NewFuzzyQuery("executeStatement", execSql).Fuzziness(2)execSqlMatchQuery := elastic.NewMatchQuery("executeStatement", execSql)fmt.Println(execSql)boolQuery.Must(execSqlMatchQuery)}if len(operateAddr) > 0 {operateAddrMatchQuery := elastic.NewMatchQuery("operateOriginAddr", operateAddr)boolQuery.Must(operateAddrMatchQuery)}if len(dbAddr) > 0 {dbAddrMatchQuery := elastic.NewMatchQuery("databaseAddr", dbAddr)boolQuery.Must(dbAddrMatchQuery)}if len(namespace) > 0 {//nameSpaceMatchQuery := elastic.NewMatchQuery("nameSpace", namespace)// 构建 wildcard 查询nameSpaceMatchQuery := elastic.NewWildcardQuery("nameSpace", "*"+namespace+"*")boolQuery.Must(nameSpaceMatchQuery)}if len(execResult) > 0 {execResultMatchQuery := elastic.NewMatchQuery("executeResult", execResult)boolQuery.Must(execResultMatchQuery)}if len(operateAccount) > 0 {operateAccountMatchQuery := elastic.NewWildcardQuery("operateAccount", "*"+operateAccount+"*")//operateAccountMatchQuery := elastic.NewFuzzyQuery("operateAccount", operateAccount)boolQuery.Must(operateAccountMatchQuery)}fmt.Println("max-min:", maxRows, minRows)//0->100:小于100  ;10->0:10到无穷大 0->0 忽略这个条件,max=0 代表无穷大if maxRows == 0 { // 情况1:min有值,max=0,最小值到无穷大    情况2:默认都不填min=0,max=0,0到无穷大;rowsQuery := elastic.NewRangeQuery("affectedRow").Gte(minRows)boolQuery.Must(rowsQuery)} else {rowsQuery := elastic.NewRangeQuery("affectedRow").Gte(minRows).Lte(maxRows)boolQuery.Must(rowsQuery)}fmt.Println("QueryOperateList list:", list)if len(list) > 0 {var newList []interface{}for _, v := range list {newList = append(newList, v)newList = append(newList, strings.ToUpper(v.(string)))}operateTypeMatchQuery := elastic.NewTermsQuery("operateType", newList...)boolQuery.Must(operateTypeMatchQuery)fmt.Println("QueryOperateList newList条件:", newList)}//================ 打印查询条件的 JSON 表示==========//queryJSON, err := boolQuery.Source()if err != nil {log.Fatalf("Error encoding query to JSON: %s", err)}formattedQuery, err := json.MarshalIndent(queryJSON, "", "  ")if err != nil {log.Fatalf("Error formatting JSON: %s", err)}fmt.Println("Elasticsearch Query:")fmt.Println(string(formattedQuery))//===============================================//// 执行ES请求需要提供一个上下文对象ctx2 := context.Background()// 创建Terms桶聚合//aggs := elastic.NewTermsAggregation().Field("operateTime").Size(1000) // 根据shop_id字段值,对数据进行分组searchResult, err := esClient.Search().Index(index).     // 设置索引名Query(boolQuery). // 设置查询条件//Aggregation("count", aggs). // 设置聚合条件,并为聚合条件设置一个名字From((pageNum-1)*pageSize).Size(pageSize).             // 设置分页参数 - 每页大小,设置为0代表不返回搜索结果,仅返回聚合分析结果Sort("operateTime", false). //设置排序字段,根据Created字段升序排序,第二个参数false表示逆序Pretty(true).               // 查询结果返回可读性较好的JSON格式Do(ctx2)                    // 执行请求if err != nil {return nil, err}//fmt.Println("分页:", (pageNum-1)*pageSize, pageSize)OperateListData := message.OperateLogListResp{Total: int(searchResult.TotalHits()),}OperateLogList := []*message.OperateLogInfo{}if searchResult.TotalHits() > 0 {for _, hit := range searchResult.Hits.Hits {var t OperateLogerr := json.Unmarshal(hit.Source, &t)if err != nil {fmt.Print(" 解析日志列表json数据失败\n", err.Error())}info := &message.OperateLogInfo{}info.ExecSql = t.ExecSqlinfo.OperateType = t.OperateTypeinfo.OperateAccount = t.OperateAccountinfo.OperateAddr = t.OperateAddrinfo.DbAddr = t.DbAddrinfo.Namespace = t.Namespaceinfo.Rows = t.Rows//info.Rows, _ = strconv.Atoi(t.Rows)info.ExecResult = t.ExecResultinfo.ExecTime = t.ExecTimeinfo.ResponseTime = t.ResponseTimeOperateLogList = append(OperateLogList, info)//打印每行数据//fmt.Printf("操作类型1: %s, 操作地址: %s ,数据库地址:%s,执行时间:%d\n", t.OperateType, t.OperateAddr, t.DbAddr, t.ExecTime)}} else {fmt.Print(" 没有数据 \n")}OperateListData.List = OperateLogListreturn &OperateListData, nil
}

打印出请求query:

GET infosec***t_new*/_search
{"query": {"bool": {"must": [{"range": {"timestamp": {"from": 1700964412000,"include_lower": false,"include_upper": false,"to": 1701223612000}}},{"match": {"executeStatement": {"query": "update ****-nk6x4'"}}},{"range": {"affectedRow": {"from": 0,"include_lower": true,"include_upper": true,"to": null}}}]}
}}

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

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

相关文章

软件测试文档类型有哪些?

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

论文学习-Bert 和GPT 有什么区别?

Foundation Models, Transformers, BERT and GPT 总结一下: Bert 是学习向量表征,让句子中某个词的Embedding关联到句子中其他重要词。最终学习下来,就是词向量的表征。这也是为什么Bert很容易用到下游任务,在做下游任务的时候&a…

基于SSM线上旅行信息管理系统设计与实现

摘 要 随着旅游业的迅速发展,传统的旅行信息查询管理方式,已经无法满足用户需求,因此,结合计算机技术的优势和普及,特开发了本线上旅行信息管理系统。 本论文首先对线上旅行信息管理系统进行需求分析,从系…

13.单调栈(接雨水、柱状图最大矩形)【灵神基础精讲】

单调栈【灵神基础精讲】 https://www.bilibili.com/video/BV1VN411J7S7/ 单调栈和单调队列的关系:单调队列单调栈滑窗 单调栈,顾名思义就是栈内元素单调按照递增(递减)顺序排列的栈。 适用问题:单调栈分为单调递增栈和单调递减栈&#xff0c…

21.Oracle的程序包(Package)

Oracle的程序包Package 一、Package的概述1、什么是Oracle11g的Package2、Package的作用是什么3、常见的系统内置Package 二、创建Package的相关语法1、Package的创建语法2、Package的删除3、具体案例4、Package的使用5、与Package相关的其他语法 三、常见内置程序包的使用1、…

熟悉SVN基本操作-(SVN相关介绍使用以及冲突解决)

一、SVN相关介绍 1、SVN是什么? 代码版本管理工具它能记住你每次的修改查看所有的修改记录恢复到任何历史版本恢复已经删除的文件 2、SVN跟Git比,有什么优势 使用简单,上手快目录级权限控制,企业安全必备子目录checkout,减少…

修复 Apache Kafka 中的远程代码执行漏洞CVE-2023-25194

文章目录 前言一、Log4Shell connection二、DisclosureUpdates, mitigations 前言 Possible RCE and denial-of-service issue discovered in Kafka Connect 在 Kafka Connect 中发现可能的 RCE 和拒绝服务问题。 更新 阿帕奇软件基金会 (ASF) 已解决了一个漏洞,…

富必达API:一站式无代码开发集成电商平台、CRM和营销系统

一站式无代码开发的连接解决方案 电子商务、客户服务系统以及其它商业应用,是现代企业运营的重要部分。然而,将这些系统进行有效的整合往往需要复杂的API开发,这对很多企业来说是一个巨大的挑战。富必达API以其一站式的无代码开发解决方案&a…

微信小程序input type=nickname不能触发隐私政策?小程序隐私协议开发指南之nickname权限篇

小程序隐私协议开发指南之nickname权限篇 涉及处理用户个人信息的小程序开发者,需通过弹窗等明显方式提示用户阅读隐私政策等收集使用规则。 为规范开发者的用户个人信息处理行为,保障用户合法权益,微信要求开发者主动同步微信当前用户已阅读并同意小程序的隐私政策等收集使…

Linux RN6752 驱动编写

一、概述 关于 RN6752V1 这个芯片这里就不做介绍了,看到这篇笔记的小伙伴应该都明白,虽然说 RN6752V1 芯片是 AHD 信号的解码芯片,但是也可以把芯片当做是一个 YUV 信号的 MIPI 摄像头,所以驱动的编写和 MIPI 摄像头无太大的区别。…

拥抱未来:大语言模型解锁平台工程的无限可能

01 了解大型语言模型 (LLM) 大型语言模型(LLM)是一种人工智能(AI)算法,它使用深度学习技术和海量数据集来理解、总结、生成和预测新内容。凭借合成大量信息的能力,LLM 可以提高以前需要人类专家的业务流程的…

木鸟途家美团......订民宿选哪个?看完让你不纠结

近日,中国旅游研究院在报告中提到,截至2023年6月,我国在线旅行预订用户规模达4.54亿,占网民整体的42.1%。民宿预订平台作为重要的组成部分,正在被更多人了解使用。当前民宿行业第一梯队木鸟、途家、美团三家&#xff0…