- 首先,我定义了一个全局变量
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}// 定义搜索的queryboolQuery := 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 EventParamresitemlist := 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}
 
