go 实战
es 从文件中读取查询信息 统计后放到文件中
package main import ( "context" "fmt" elastic "github.com/olivere/elastic/v7" "time" ) var host = []string{ "http://192.168.0.21:9200/", "http://192.168.0.22:9200/", } var client *elastic.Client func init() { var err error client, err = elastic.NewClient(elastic.SetURL(host...)) if err != nil { fmt.Printf("create client failed,err:%v", err) } } func PingNode() { start := time.Now() info, code, err := client.Ping(host[0]).Do(context.Background()) if err != nil { fmt.Printf("Ping es failed,err:%v\n", err) } duration := time.Since(start) fmt.Printf("const time:%v\n", duration) fmt.Printf("Elasticsearch returned with code %d and version %s\n", code, info.Version.Number) } func IndexExists(index ...string) bool { exists, err := client.IndexExists(index...).Do(context.Background()) if err != nil { fmt.Printf("%v\n", err) } fmt.Println(exists) return exists } func TermQuery(index, type_, fieldName, fieldValue, start_time, stop_time string) *elastic.SearchResult { //query := elastic.NewTermQuery(fieldName, fieldValue) timeQ := elastic.NewRangeQuery("@timestamp").Gte(start_time).Lte(stop_time) query := elastic.NewMatchPhraseQuery(fieldName, fieldValue) generalQ := elastic.NewBoolQuery().Should().Filter(timeQ).Filter(query) //query := elastic.NewQueryStringQuery(fieldName+":"+fieldValue) //关键字查询 searchResult, err := client.Search(index). Query(generalQ).RestTotalHitsAsInt(true). Do(context.Background()) if err != nil { panic(err) } //fmt.Printf("query cost %d millisecond.\n", searchResult.TookInMillis) return searchResult } func main() { es.PingNode() es.IndexExists("api.yungehuo.com-2020-08") srcfile, err := os.Open("file") if err != nil { fmt.Println("open srcfile err:", err) } defer srcfile.Close() reader := bufio.NewReader(srcfile) destfile, err := os.OpenFile("destfile", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0644) if err != nil { fmt.Println("open destfile err:", err) } defer destfile.Close() writer := bufio.NewWriter(destfile) for { jiekou, err := reader.ReadString('\n') //读到一个换行就结束 if err == io.EOF { // io.EOF 表示文件的末尾 break } // 输出内容,如果是用Println会多出现一个空行,Println自带换行 a := es.TermQuery("api.yungehuo.com-2020-08", "_doc", "args", jiekou, "2020-08-13T16:00:00.448Z", "2020-08-18T16:00:00.930Z") fmt.Printf("%v\t%v\n", strings.FieldsFunc(jiekou, unicode.IsSpace)[0], a.Hits.TotalHits.Value) writer.WriteString(fmt.Sprintf("%v\t\t\t%v\n", strings.FieldsFunc(jiekou, unicode.IsSpace)[0], a.Hits.TotalHits.Value)) } }