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

}

  

posted @ 2020-08-21 12:02  枯藤老艹树  阅读(151)  评论(0编辑  收藏  举报