- 首先,我定义了一个全局变量
ESClient
作为ES客户端的单例,并在启动初调用Init
函数初始化它 ```go var hostlist []string{ “http://ip1:9200/“, “http://ip2:9200/“, “http://ip3:9200/“ }
var ESClient *elastic.Client
func InitEs() { var err error // 创建es连接,如果通过nat地址访问,为防止地址被自动转换,可加elastic.SetSniff(false) ESClient, err = elastic.NewClient(elastic.SetURL(hostlist…)) if err != nil { logs.Error(err) os.Exit(1) } for _, v := range hostlist { // 尝试请求es info, code, err := ESClient.Ping(v).Do(context.Background()) if err != nil { logs.Error(err) os.Exit(1) } logs.Info(“Elasticsearch Node %s returned with code %d and version %s\n”, v, code, info.Version.Number) esversion, err := ESClient.ElasticsearchVersion(v) logs.Info(“Elasticsearch Node %s version %s\n”, v, esversion) } }
2. 然后定义了一个查询入参,将查询字段的json与参数类型定义出来
```go
// 查询入参
type EventParam struct {
User string `json:"username"`
Type string `json:"logtype"`
Message string `json:"logmessage"`
Time int64 `json:"logtime"`
}
- 最后编写
Search
方法来进行查询func Search(req *EventParam, start,end,page, size int) ([]*eventti.EventParam, int, error) {
// 定义分页
if page < 1 {
page = 1
}
if size < 0 {
size = 10000
}
// 定义搜索的query
boolQuery := elastic.NewBoolQuery()
if req.User != "" {
boolQuery.Filter(elastic.NewMatchQuery("username", strings.ToLower(req.User)))
}
if req.Type != "" {
boolQuery.Filter(elastic.NewMatchQuery("logtype", req.Type))
}
if req.Message != "" {
boolQuery.Filter(elastic.NewMatchPhraseQuery("logmessage", req.Message))
}
// 定义查询时间范围
if req.Start != 0 && req.End != 0 {
boolQuery.Filter(elastic.NewRangeQuery("logtime").Gte(start), elastic.NewRangeQuery("logtime").Lte(end))
}
// 执行搜索
res, _ := models.ESClient.Search().Index("eventti-*").Type("doc").Query(boolQuery).Size(size).From((page - 1) * size).Do(context.Background())
var typ EventParam
resitemlist := make([]*eventti.EventParam, 0)
//从搜索结果中取数据,只会取EventParam定义的字段
for _, item := range res.Each(reflect.TypeOf(typ)) {
if t, ok := item.(EventParam); ok {
tmp := eventti.EventSearchResItem{
User: t.User,
Message: t.Message,
Time: strconv.FormatInt(t.Time, 10),
Type: t.Type,
}
resitemlist = append(resitemlist, &tmp)
}
}
return resitemlist, len(resitemlist), nil
}