package service import ( "encoding/json" "fmt" "github.com/tidwall/gjson" "github.com/uniplaces/carbon" "search_server/model" "search_server/pkg/es" "search_server/requests" "search_server/service/query" "strconv" ) type SearchLogService struct { } //获取index方法的数据 func (sls *SearchLogService) GetIndexData(request map[string]string) (result map[string]interface{}, err error) { //索引/类型 index := "keyword_search_log_1/log" var esResult string _, exist := request["scroll_id"] if exist || request["scroll_id"] == "" { queryString := query.GetSearchLogIndexQuery(request) esResult, err = es.CurlES(index, queryString) if err != nil { return } } else { params := make(map[string]string) scroll, _ := strconv.Atoi(request["scroll"]) if scroll > 0 { params["scroll"] = params["scroll"] + "m" } else { params["scroll"] = "5m" } params["scroll_id"] = request["scroll_id"] paramsStr, _ := json.Marshal(params) esResult, err = es.ScrollES(string(paramsStr)) if err != nil { return } } fmt.Println(esResult) result = make(map[string]interface{}) //循环遍历出数据 result["total"] = gjson.Get(esResult, "hits.total").Int() result["scroll_id"] = gjson.Get(esResult, "_scroll_id").String() sources := gjson.Get(esResult, "hits.hits.#_source").Array() var list []map[string]interface{} for _, source := range sources { listItem := make(map[string]interface{}) var hits model.SearchLogHits var platform string _ = json.Unmarshal([]byte(source.String()), &hits) if hits.Source.Platform == 1 { platform = "PC" } else if hits.Source.Platform == 2 { platform = "H5" } else { platform = "" } listItem["create_time"] = hits.Source.CreateTime listItem["user_id"] = hits.Source.UserID listItem["flag"] = hits.Source.Flag listItem["ip"] = hits.Source.IP listItem["keyword"] = hits.Source.Keyword listItem["browser_info"] = hits.Source.BrowserInfo listItem["platform"] = platform listItem["adtag"] = hits.Source.Adtag listItem["ptag"] = hits.Source.Ptag listItem["user_sign"] = hits.Source.UserSign list = append(list, listItem) } result["list"] = list return } func (sls *SearchLogService) GetSumIp(r requests.SumIpRequest) (res []map[string]interface{}, err error) { //默认24小时 if r.StartTime == 0 { r.StartTime = carbon.Now().SubDays(1).Timestamp() } if r.EndTime == 0 { r.EndTime = carbon.Now().Timestamp() } if r.Size == 0 { r.Size = 100 } if r.Size > 20000 { r.Size = 20000 } queryString := query.GetSumIpQuery(r) fmt.Println(queryString) index := "keyword_search_log_1" esResult, err := es.CurlES(index, queryString) if err != nil { return } buckets := gjson.Get(esResult, "aggregations.tatol.buckets").Array() for _, bucket := range buckets { item := map[string]interface{}{ "ip": bucket.Map()["key"].String(), "num": bucket.Map()["doc_count"].Int(), } res = append(res, item) } return }