golang elasticsearch 搜索封装

2021-08-11 20:55:46 +08:00
 xxjwxc

#日志系统说明

代码传送门

说明:

  1. trace_id: 用来追踪一个请求的全服务调用流向
  2. 应用 /服务的唯一标识: 用来确定日志产生的应用服务器的唯一标识(可以细分)
  3. 业务项的唯一标识: 用来确定逻辑段的唯一标识,如 orderid,sku,stokin_code 等
  4. 时间序列表: 用来记录日志的变化时间序,及日志创建的时间点
  5. 事件序列、描述: 具体描述一件事情;如打包调试信息,封箱错误信息,拆包裹业务信息
  6. 变化值序列: 描述事件内部的不同变化值
  7. 备注: 用于一些说明
  8. 预留字段: 用来扩展日志系统业务能力
  9. caller: 日志产生的当前文件名及行号等信息
  10. user_id,user_name:添加操作人记录

6 、golang elasticsearch 查询封装:

import (
	"github.com/xxjwxc/esLog/view/es"
)

func main(){
	client,_ := New(WithIndexName("test_log"), WithAddrs("http://192.168.198.17:9200/"))
	//精确搜索
	term := make(map[string]interface{})
	term["topic"] = "topic"
	term["etype"] = oplogger.EOpType_EOpGunbuster
	term["user_name"] = "username"
	term["ekey"] = "iddd-1"
	term["elevel"] = oplogger.ELogLevel_EOperate
	//模糊匹配
	match := make(map[string]interface{})
	match["desc"] = "desc"
	match["attach"] = "attach"

	// 时间范围
	timeCase := make(map[string]CaseSection)
	timeCase["creat_time"] = CaseSection{
		Min: time.Now().AddDate(0, 0, -1),
		Max: time.Now(),
	}

	//构造搜索器
	var que EsQuery
	que.OnPages(0, 10).OnTerm(term).OnMatch(match).OnRangeTime(timeCase)

	// 打印查询字符串 
	data1, _ := json.Marshal(que.OnSource())
	fmt.Println(string(data1))

	// 查询结果
	client, _ := New(WithIndexName(Index), WithAddrs(url))
	var eslog []ESLog
	client.WithOption(WithIndexName(Index), WithTypeName(Index)).Search(que.OnSource(), func(e []byte) error {
		var tmp ESLog
		json.Unmarshal(e, &tmp)
		eslog = append(eslog, tmp)
		return nil
	})

	fmt.Println(eslog)// 答应结果
}

6 、逻辑及代码调用说明:

日志写入调用:

//批量添加
client.BulkAdd(list)

日志写入调用:

//批量添加
client.Add(info)

日志搜索:


//精确搜索
term := make(map[string]interface{})
...
//模糊匹配
match := make(map[string]interface{})
...
//时间段搜索
timeCase := make(map[string]es.CaseSection)
...


// tools 搜索
eslist := tools.Search(term, match, timeCase, req.Page, req.Limit)

说明:以接口解耦,具体业务根据不同需求实现接口实现。主要用来对数据分流。

传送门

设计思想

1142 次点击
所在节点    程序员
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/795180

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX