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))
}
}

浙公网安备 33010602011771号