go语言中可以用olivere会处理es数据
// 初始化
func init() {
logInfo := log.New(os.Stdout, "APP", log.LstdFlags)
var err error
client, err = elastic.NewClient(elastic.SetURL(host), elastic.SetSniff(false), elastic.SetTraceLog(logInfo))
if err != nil {
panic(err)
}
info, code, err := client.Ping(host).Do(context.Background())
if err != nil {
panic(err)
}
fmt.Printf("Elasticsearch returned with code %d and version %s\n", code, info.Version.Number)
}
// 数据查询
func get(eventName string, evnetType int, startTime, endTime int64) (pv, uv int64, err error) {
ctx := context.Background()
bq := elastic.NewBoolQuery()
bq.Filter(elastic.NewMatchPhraseQuery("nginx.access.req_bodykv.event_name", eventName),
elastic.NewMatchPhraseQuery("nginx.access.req_bodykv.type", evnetType),
elastic.NewRangeQuery("@timestamp").Gte(startTime).Lte(endTime))
pv, err = client.Count(index).Query(bq).Do(context.Background())
if err != nil {
panic(err)
}
avgs := elastic.NewCardinalityAggregation().Field("nginx.access.req_bodykv.token")
resp, err := client.Search(index).Query(bq).Size(0).Aggregation("uv", avgs).Do(ctx)
if err != nil {
println(err)
}
v, _ := resp.Aggregations.ValueCount("uv")
uv = int64(*v.Value)
return
}