From 171d94e0f254b485ed5d09cef9a208b0f5672048 Mon Sep 17 00:00:00 2001 From: sunty <1172534965@qq.com> Date: 星期二, 08 九月 2020 14:01:26 +0800 Subject: [PATCH] fix source aggs --- EsClient_test.go | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 110 insertions(+), 1 deletions(-) diff --git a/EsClient_test.go b/EsClient_test.go index 7c078bf..17e6525 100644 --- a/EsClient_test.go +++ b/EsClient_test.go @@ -1,9 +1,11 @@ package esutil import( - "testing" + "math" + "testing" "fmt" "encoding/json" + "time" ) func TestEsReq(t *testing.T){ @@ -28,3 +30,110 @@ } fmt.Println(dbinfos) } +func FaceSourceAggregations(buf []byte, thresholdTime int, thresholdStayTime int) (sources []map[string]interface{}, err error) { + loc, err := time.LoadLocation("Asia/Shanghai") + if err != nil { + return nil, errors.New("鏃跺尯璁剧疆閿欒") + } + var info interface{} + json.Unmarshal(buf, &info) + out, ok := info.(map[string]interface{}) + if !ok { + return nil, errors.New("http response interface can not change map[string]interface{}") + } + middle, ok := out["aggregations"].(map[string]interface{}) + if !ok { + return nil, errors.New("first hits change error!") + } + bucketsAggs := middle["buckets_aggs"].(map[string]interface{}) + buckets := bucketsAggs["buckets"].([]interface{}) + if len(buckets) == 0 { + return nil, nil + } + allSource := make([]map[string]interface{}, 0) + for _, inf := range buckets { + hitsSources := make([]map[string]interface{}, 0) + topAttentionHits := inf.(map[string]interface{})["top_attention_hits"].(map[string]interface{}) + middleHits := topAttentionHits["hits"].(map[string]interface{}) + finalHits := middleHits["hits"].([]interface{}) + startTime := "" + indexLength := len(finalHits) + point := 0 + for _, in := range finalHits { + point = point + 1 + tmpHitSource := make(map[string]interface{}) + tmpBuf, ok := in.(map[string]interface{}) + if !ok { + fmt.Println("change to source error!") + continue + } + source, ok := tmpBuf["_source"].(map[string]interface{}) + if !ok { + fmt.Println("change _source error!") + continue + } + baseInfo := source["baseInfo"].([]interface{})[0].(map[string]interface{}) + targetInfo := source["targetInfo"].([]interface{})[0].(map[string]interface{}) + tmpTime := source["picDate"].(string) + mTime, err := time.ParseInLocation("2006-01-02 15:04:05", tmpTime, loc) + if err != nil { + return nil, errors.New("鏃堕棿瑙f瀽閿欒") + } + + sTime := tmpTime + eTime := mTime.Add(time.Second * 1).Format("2006-01-02 15:04:05") + stayTime := 1.0 + if startTime != "" && point <= indexLength { + sinTime, _ := time.ParseInLocation("2006-01-02 15:04:05", startTime, loc) + passTime := math.Abs(mTime.Sub(sinTime).Seconds()) + hitsSources[len(hitsSources)-1]["stayTime"] = stayTime + //fmt.Println("passTime: ", passTime) + if int(passTime) <= thresholdTime { + if point == indexLength { + hitStartTime := hitsSources[len(hitsSources)-1]["startTime"].(string) + realStartTime, _ := time.ParseInLocation("2006-01-02 15:04:05", hitStartTime, loc) + stayTime = math.Abs(mTime.Sub(realStartTime).Seconds()) + hitsSources[len(hitsSources)-1]["stayTime"] = stayTime + startTime = "" + } else { + startTime = tmpTime + hitsSources[len(hitsSources)-1]["endTime"] = tmpTime + continue + } + + } else { + hitStartTime := hitsSources[len(hitsSources)-1]["startTime"].(string) + hitEndTime := hitsSources[len(hitsSources)-1]["endTime"].(string) + realStartTime, _ := time.ParseInLocation("2006-01-02 15:04:05", hitStartTime, loc) + realEndTime, _ := time.ParseInLocation("2006-01-02 15:04:05", hitEndTime, loc) + stayTime = math.Abs(realEndTime.Sub(realStartTime).Seconds()) + if sinTime.Sub(mTime).Seconds() == 0 { + sinTime.Add(time.Second * 1) + sinTime.Format("2006-01-02 15:04:05") + hitsSources[len(hitsSources)-1]["endTime"] = tmpTime + stayTime = 1 + } + hitsSources[len(hitsSources)-1]["stayTime"] = stayTime + if point == indexLength { + stayTime = 1 + } + startTime = "" + } + } + //fmt.Println("========================================================") + startTime = tmpTime + tmpHitSource["faceId"] = baseInfo["targetId"].(string) + if targetInfo["areaId"] == nil { + continue + } + tmpHitSource["areaId"] = targetInfo["areaId"].(string) + tmpHitSource["startTime"] = sTime + tmpHitSource["faceImg"] = targetInfo["picSmUrl"].(string) + tmpHitSource["endTime"] = eTime + tmpHitSource["stayTime"] = stayTime + hitsSources = append(hitsSources, tmpHitSource) + } + allSource = append(allSource, hitsSources...) + } + return allSource, nil +} \ No newline at end of file -- Gitblit v1.8.0