Golang操作elasticsearch使用第三方包:olivere github。总结一下olivere操作ES的常用功能,方便查阅。说明:以下例子用到的es index:“test”, es type:“test”, es address: “http://10.1.1.1:9200"新建es clientfunc ESClient() (client *elastic.Client,err error){ file := “./log.log” logFile, _ := os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0766) // 应该判断error,此处简略 cfg := []elastic.ClientOptionFunc{ elastic.SetURL(“http://10.1.1.1:9200”), elastic.SetSniff(false), elastic.SetInfoLog(log.New(logFile, “ES-INFO: “, 0)), elastic.SetTraceLog(log.New(logFile, “ES-TRACE: “, 0)), elastic.SetErrorLog(log.New(logFile, “ES-ERROR: “, 0)), } client,err =elastic.NewClient(cfg …) return}查看某文档是否存在,给定文档ID查询func isExists(id string)bool{ client,_ := ESClient() defer client.Stop() exist,_ := client.Exists().Index(“test”).Type(“test”).Id(id).Do(context.Background()) if !exist{ log.Println(“ID may be incorrect! “,id) return false } return true}获取某文档的内容func(doc *myDocument) Get(id string){ client ,:= ESClient() defer client.Stop() if !isExists(id){ return } esResponse,err := client.Get().Index(“test”).Type(“test”).Id(id).Do(context.Background()) if err != nil { // Handle Error return } json.Unmarshal(*esResponse.Source,&doc)}新增文档func(doc *myDocument) Add(id string){ client ,:= ESClient() defer client.Stop() if !isExists(id){ return } client.Index().Index(“test”).Type(“test”).Id(id).BodyJson(doc).Do(context.Background())}批量新增func BulkAdd(docs []myDocument){ bulkRequest := seriesClient.Bulk() client ,:= ESClient() defer client.Stop() for ,doc := range docs{ esRequest := elastic.NewBulkIndexRequest().Index(“test”).Type(“test”).Id(id).Doc(doc) bulkRequest = bulkRequest.Add(esRequest) } bulkRequest.Do(context.Background())}更新文档func Update(updateField *map[string]interface{},id string){ client ,:= ESClient() defer client.Stop() if !isExists(id){ return } ,err:=client.Update().Index(“test”).Type(“test”).Id(id).Doc(updateField).Do(context.Background()) if err != nil{ //Handle Error }}删除文档func Delete(id string){ client ,:= ESClient() defer client.Stop() if !isExists(id){ return } ,err:=client.Delete().Index(“test”).Type(“test”).Id(id).Do(context.Background()) if err != nil{ //Handle Error }}搜索文档(搜索是ES非常引以为傲的功能,以下示例是相对复杂的查询条件,需将查询结果排序,按页返回)func Search(criteria *SearchCriteria)(docs []myDocument){ client ,:= ESClient() defer client.Stop() query := elastic.NewBoolQuery() query = query.Must(elastic.NewTermQuery(“category”,criteria.Category)) query=query.Must(elastic.NewMatchQuery(“title”,criteria.Title)) query=query.Must(elastic.NewRangeQuery(“update_timestamp”).Gte(criteria.UpdateTime)) esResponse, :=client.Search().Index(“test”).Type(“test”). Query(query).Sort(criteria.Sort,criteria.Order==“ASC”||criteria.Order==“asc”). From(criteria.Offset).Size(criteria.Limit).Do(context.Background()) for _,value:= range esResponse.Hits.Hits{ var doc *myDocument json.Unmarshal(*value.Source,&doc) docs = append(docs,doc) } return}type SearchCriteria struct{ Category string json:"category"
Limit int json:"limit"
Offset int json:"offset"
Title string json:"title"
UpdateTime int64 json:"update_timestamp"
Order string json:"order"
Sort string json:"sort"
}