go elasticsearch 测试实例

news2025/1/13 13:22:24

// 查询列表数据
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 OperateLog
			err := json.Unmarshal(hit.Source, &t)
			if err != nil {
				fmt.Print(" 解析日志列表json数据失败\n", err.Error())
			}

			info := &message.OperateLogInfo{}
			info.ExecSql = t.ExecSql
			info.OperateType = t.OperateType
			info.OperateAccount = t.OperateAccount
			info.OperateAddr = t.OperateAddr
			info.DbAddr = t.DbAddr
			info.Namespace = t.Namespace
			info.Rows = t.Rows
			//info.Rows, _ = strconv.Atoi(t.Rows)
			info.ExecResult = t.ExecResult
			info.ExecTime = t.ExecTime
			info.ResponseTime = t.ResponseTime

			OperateLogList = 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 = OperateLogList
	return &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.coloradmin.cn/o/1274442.html

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

相关文章

【UGUI】实现背包的常用操作

1. 添加物品 首先,你需要一个包含物品信息的类,比如 InventoryItem: using UnityEngine;[CreateAssetMenu(fileName "NewInventoryItem", menuName "Inventory/Item")] public class InventoryItem : ScriptableObje…

【Azure 架构师学习笔记】- Azure Databricks (1) - 环境搭建

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 前言 Databricks 已经成为了数据科学的必备工具,今时今日你已经很难抛开它来谈大数据,它常用于做复杂的ETL中的T, 数据分析,数据挖掘等,…

[架构之路-255]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 架构设计 - 软件架构风格

目录 前言: 一、建筑风格 1.1 什么是建筑风格 1.2 常见的建筑风格 1.3 如何区分不同的建筑风格 二、软件架构风格概述 2.1 什么是软件架构风格 2.2 如何区分不同的软件架构风格 2.3 软件架构风格的发展阶段 2.4 软件架构风格与软件架构的区别 2.5 常见的…

在 S/4HANA、ECC 和 ERP 上轻松扩展或简化 SAP WM,并将其自动化到移动环境中

为您的 SAP WM 提供完整的本地 SAP 图形用户界面 基于原生通道架构(NCA),iOS、Android 和手持 Scanguns 版 Liquid UI 可与 SAP WM 原生连接,同时保留 SAP GUI 丰富的事务处理功能。它使您无需编程即可直接从移动设备访问 MIGO、…

知识图谱最简单的demo实现——基于pyvis

1、前言 我们在上篇文章中介绍了知识图谱的简单实现,最后使用neo4j进行了展示,对于有些情况我们可能并不想为了查看知识图的结果再去安装一个软件去实现,那么我们能不能直接将三元组画出来呢/ 接下来我们就介绍一个可视化的工具pyvis&#…

Memcached最新2023年面试题,高级面试题及附答案解析

文章目录 01、Memcached是什么,有什么作用?02、Memcached的多线程是什么?如何使用它们?03、Memcached与Redis的区别?04、如果缓存数据在导出导入之间过期了,怎么处理这些数据呢?05、如何实现集群…

网站提示不安全?

随着互联网的普及和发展,网络安全问题日益严重。黑客攻击、数据泄露、恶意软件等问题层出不穷,给企业和个人带来了巨大的损失。在这个背景下,确保网站安全显得尤为重要,而使用SSL证书是解决这些问题的有效措施。 什么是SSL证书&am…

【23-24 秋学期】NNDL 作业9 RNN - SRN

简单循环网络(Simple Recurrent Network,SRN)只有一个隐藏层的神经网络. 目录 1. 实现SRN (1)使用Numpy (2)在1的基础上,增加激活函数tanh (3&#xff0…

剪辑素材,6个可白嫖的视频素材网站

找视频素材就上这6个网站,免费下载,赶紧收藏好! 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYxMjky 菜鸟图库网素材非常丰富,网站主要以设计类素材为主,高清视频素材也很多,像风景、植物、动物…

HTML—列表、表格、表单

1、列表 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表 1.1 无序列表 作用:布局排列整齐的不需要规定顺序的区域 标签:ul 嵌套 li,ul 是无序列表,li 是列表条目 注意事项&#…

服务器数据恢复—EMC存储raid5故障导致上层应用崩溃的数据恢复案例

服务器存储数据恢复环境: EMC某型号存储,8块组建一组raid5磁盘阵列。上层操作系统采用zfs文件系统。 服务器存储故障&分析: raid5阵列中有2块硬盘未知原因离线,raid5阵列崩溃,上层应用无法正常使用。 服务器数据恢…

luceda ipkiss教程 38:等长波导布线

这次介绍通过调整圆弧角度实现等长弯曲波导布线的案例: 四段波导的长度分别为: 所有代码如下: from si_fab import all as pdk from ipkiss3 import all as i3 class MMI1x4(i3.PCell):_name_prefix "MMI1x4" # adding a nam…

事务--02---TCC模式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 TCC模式两阶段提交 的模型 1.流程分析阶段一( Try ):阶段二(Confirm):阶段二(Canncel): 2.事…

利用ARCGIS做地下水脆弱性评价分析

(一)行政边界数据、土地利用数据和土壤类型数据 本文所用到的河北唐山行政边界数据、土地利用数据和土壤类型数据均来源于中国科学院资源环境科学与数据中心(https://www.resdc.cn/Default.aspx)。 (二)地…

【shell】正则表达式和AWK

一.正则表达式 通配符匹配文件(而且是已存在的文件) 基本正则表达式扩展正则表达式 可以使用 man 手册帮助 正则表达式:匹配的是文章中的字符 通配符:匹配的是文件名 任意单个字符 1.元字符(字符匹配&…

SAP_ABAP_编程基础_内表_创建内表 / 填充内表 / 读取内表 /修改和删除内表行 / 内表排序 / 创建顺序表 / 比较内表 / 初始化内表

SAP ABAP 顾问(开发工程师)能力模型_Terry谈企业数字化的博客-CSDN博客文章浏览阅读470次。目标:基于对SAP abap 顾问能力模型的梳理,给一年左右经验的abaper 快速成长为三年经验提供超级燃料!https://blog.csdn.net/j…

Pandas进阶:transform 数据转换的常用技巧

引言 本次给大家介绍一个功能超强的数据处理函数transform,相信很多朋友也用过,这里再次进行详细分享下。 transform有4个比较常用的功能,总结如下: 转换数值 合并分组结果 过滤数据 结合分组处理缺失值 一. 转换数值 pd.…

观海微电子---AF、AG、AR 的差别和作用

一、名称解释及原理 1.AF ---- Anti-fingerprint,中文为抗指纹。一般 SiO2AF 材料(DON,M4、道康宁 AF 材料),一般采用真空蒸发镀膜法。 原理:AF 防污防指纹玻璃是根据荷叶原理,在玻璃外表面涂制…

⭐ Unity + ARKIT ARFace脸部追踪

相比之前的图像物体检测,这脸部检测实现起来会更加的简单。 (1)首先我们先在场景中的物体上添加一个AR Face Mananger组件: (2)以上組件的 Face Prefab所代表的就是脸部的模型也就是覆盖在脸部上面的投影模…

单片机怎么实现真正的多线程?

单片机怎么实现真正的多线程? 不考虑多核情况时,CPU在一个时间点只能做一件事,因为切换的速度快所以看起来好像是同时执行多个线程而已。 实际上就是用定时器来做时基,以时间片的方式分别执行来实现的,只不过实现起来细节比较复…