package StudentDao import ( "dsBigData/Business/Student/StudentModel" "dsBigData/Utils/CommonUtil" "dsBigData/Utils/EsUtil" "encoding/json" "github.com/olivere/elastic/v7" "github.com/tidwall/gjson" ) var esClient = EsUtil.EsClient var CTX = EsUtil.CTX func GetStudentCountByCityOrDistrict(cityCode string, districtCode string) ([]StudentModel.StudentCountAggsXxbxlx, error) { enableFlagTerm := elastic.NewTermQuery("enable_flag", 1) delFlagTerm := elastic.NewTermQuery("del_flag", 0) bUseTerm := elastic.NewTermQuery("data_content.b_use", 1) var areaTerm *elastic.TermQuery if len(cityCode) > 0 { areaTerm = elastic.NewTermQuery("city_code", cityCode) } else if len(districtCode) > 0 { areaTerm = elastic.NewTermQuery("district_code", districtCode) } boolQuery := elastic.NewBoolQuery().Must(areaTerm, enableFlagTerm, delFlagTerm, bUseTerm) xxbxlxAggs := elastic. NewTermsAggregation(). Field("school_type"). Size(50) result, err := esClient.Search(). Index("user_student"). Query(boolQuery). Size(1000). Aggregation("district", xxbxlxAggs). Do(CTX) if err != nil { return nil, err } resByte, err := json.Marshal(result.Aggregations) resStr := string(resByte) var studentCountAggsXxbxlxArr []StudentModel.StudentCountAggsXxbxlx resCount := gjson.Get(resStr, "xxbxlx.buckets.#") for i := 0; i < int(resCount.Num); i++ { var studentCountAggsXxbxlx StudentModel.StudentCountAggsXxbxlx studentCountAggsXxbxlx.XxbxlxCode = gjson.Get(resStr, "xxbxlx.buckets."+CommonUtil.ConvertIntToString(i)+".key").Str studentCountAggsXxbxlx.Count = gjson.Get(resStr, "xxbxlx.buckets."+CommonUtil.ConvertIntToString(i)+".doc_count").Raw studentCountAggsXxbxlxArr = append(studentCountAggsXxbxlxArr, studentCountAggsXxbxlx) } return studentCountAggsXxbxlxArr, nil }