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 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
          }
        }
      }
    ]
  }
}

 

}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

版本控制系统Git学习笔记-Git基本知识介绍

目录 前言一、版本控制系统1.1 什么是版本控制系统1.2 本地版本控制系统1.3 集中化的版本控制系统1.3 分布式版本控制系统 二、Git简介2.1 数据处理方式2.2 几个特点2.2.1 几乎所有操作都是本地执行2.2.2 Git保证完整性2.2.3 Git一般只添加数据 2.3 Git中文件状态2.3.1 三种文件…

抖音直播招聘报白如何提高求职者体验?

为了提升抖音直播招聘报白中求职者的体验,以下是一些建议: 提供清晰的招聘流程和信息。在直播招聘开始之前,企业或人力资源公司应提供清晰的流程和信息,包括直播时间和直播平台, 职位信息,招聘要求等&…

为什么要在项目中使用TypeScript?

随着越来越多的开发人员采用TypeScript,人们需要了解在下一个项目中应该使用TypeScript的原因。尽管它在早期应用中遇到了一些阻力,但在过去十年,它迅速成为一种广泛使用的编程语言。 以下介绍如何使用TypeScript以及它给开发人员带来的一些好…

Java核心知识点整理大全24-笔记

22. 数据结构 22.1.1. 栈(stack) 栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈顶 (top)。它是后进先出(LIFO)的。对栈的基…

思维模型 仰巴脚效应

本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。不完美才美。 1 仰巴脚效应的应用 1.1 “仰巴脚效应”在人际沟通领域的应用 美国总统罗斯福在竞选总统时,曾经有一位歌唱家计划为他举办一场音乐会以助选。然而,这…

波特图频率定位

生产波特图 设置坐标轴到指定位置 截至频率设置到-3db 对应的频率为158.777 Hz 同理就算对应的容抗 为 1002欧姆电阻 通过计算对应的阻抗。 特此记录 anlog 2023年11月30日

瑜伽学习零基础入门,各种瑜伽教学方法全集

一、教程描述 练习瑜伽的好处多多,能够保证平衡健康的身体基础,提升气质、塑造形体、陶冶情操,等等。本套教程是瑜伽的组合教程,共由33套视频教程组合而成,包含了塑身纤体,速效瘦身,四季养生&a…

SpringCloudAlibaba微服务 【实用篇】| Nacos配置管理

目录 一:Nacos配置管理 1. 统一配置管理 2. 配置热更新 3. 配置共享 4. 搭建Nacos集群 tips:前些天突然发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家,感兴趣的同学可以进…

InfluxDB相关概念

概念 database:数据库,用来针对于不同应用进行数据隔离measurement:数据库中的表,类似与关系型数据库中 tablepoints:表里面的一行数据。相当于关系库中表中一条记录,由时间戳(time&#xff09…

数据库系统原理——备考计划2:数据库系统的概述

前言: 基于课本、上课ppt、复习总结ppt进行一个知识点的罗列,方便后期高效地复习 目录 前言: 一、基本概念 1.数据: (1)概念: (2)数据的种类: (3&…

VSCode搭建STM32开发环境

1、下载安装文件 链接:https://pan.baidu.com/s/1WnpDTgYBobiZaXh80pn5FQ 2、安装VSCodeUserSetup-x64-1.78.2.exe软件 3、 在VSCode中安装必要的插件 3、配置Keil Assistant插件 4、在环境变量中部署mingw64编译环境

代理注册行业CRM系统:提升客户满意度,增加业绩

代理注册行业客户量大、合同繁多,传统的管理方式不再能够满足代理注册企业的管理需求。为了响应国家的数字化号召,很多代理注册企业开始使用CRM系统。下面就来说说,代理注册行业CRM系统有什么作用? 1、客户信息管理 代理注册行业…

STM32 Nucleo-64 boards 外设资源引脚对应关系图

STM32 Nucleo-64 boards 外设资源引脚对应关系图 1. STM32 NUCLEO-F103RB1.1 串口对应关系图1.2 I2C对应关系图【参考博文】1. STM32 NUCLEO-F103RB 1.1 串口对应关系图 1.2 I2C对应关系图 注意:STM32 NUCLEO-F103RB

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

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

spring security 艰苦学习中

一、初次感知 1.jwt工具类 密钥secret 有点意思。 2.PasswordEncoder 对密码进行加密,在配置类中返回bean. 下面这个关于加密和解密的东西是有误导性的。

绩效考核管理项目|记录2

给界面添加筛选条件并且把搜索功能实现 这段代码写入搜索方法里面就能实现功能。 private void bingdgv(){//筛选项:用户名、职位代码、是否辞职string userName txtUserName.Text.Trim();int baseTypeId (int)base_cbx.SelectedValue;bool isStop isdel_ckb.Che…

拼多多发布Q3财报,Temu成第二增长引擎

KlipC报道:11月28日晚间,拼多多发布了2023年三季度财报。据数据显示该公司营收较上年同期增长93.9%,达688.4亿元。财报公布后,拼多多美股开盘即涨超18%,目前拼多多的市值已经来到1847亿美元逼近阿里巴巴(市…

Kali 修改IP地址和DNS 开启SSH和远程桌面

一、修和IP和DNS 1、打开配置文件 vim /etc/network/interfaces# 加入 auto eth0 iface eth0 inet static address 10.3.0.231 netmask 255.255.255.0 gateway 10.3.0.12、取消IP地址 ip addr flush dev eth0 3、配置DNS vim /etc/resolv.confnameserver 114.114.114.114 …

先喝点水,这期程序员兼职干货没有水分!

钱越来越难挣?程序员找兼职越来越难?结局只能指路美团? 还没看透职场“高薪”骗局?别人早就把精力放在了做副业上。兼职找不到,多半是经验不够、思路没打开,本篇文章,应该能让你茅塞顿开、收获颇丰。先喝…

设a是含有n个分量的整数数组,写出求a中n个整数的最大值的递归函数

设a是含有n个分量的整数数组,写出求a中n个整数的最大值的递归函数 代码思路:让你递归求最大值,你就比较当前的元素和前面数组一部分元素即可, 然后递归别忘了退出条件。 int findMax(int arr[],int n) {if (n 1) {return arr[0…