go工具方法-elasticsearch

package es

import (   "context"   "fmt"   "github.com/olivere/elastic"   "go-pkg/pkg/cfg")//可参考https://github.com/ashion89/go-pkg/tree/master/pkg/es中测试var client *elastic.Clientvar ctx = context.Background()var config  = cfg.GetConfig()

//初始化esfunc Init() error {   var url = config.Es.Url   var user = config.Es.User   var password = config.Es.Password

   var err error   client, err = elastic.NewClient(      elastic.SetURL(url),      elastic.SetBasicAuth(user, password),      elastic.SetSniff(false),   )   if err != nil {      fmt.Println("NewClient err ",err)      return err   }   info, code, err := client.Ping(url).Do(ctx)   if err != nil {      fmt.Println("Ping err ",err)      return err   }

   if code == 200 {      fmt.Printf("connected to es: %s ,version: %s \n", info.ClusterName, info.Version.Number)   }   return nil}

//获取连接func getClient() *elastic.Client {   if client != nil {      return client   } else {      err := Init()      fmt.Println("init err ",err)      return client   }}

//添加数据到es
import (   "encoding/json"   "errors"   "fmt"   "github.com/olivere/elastic"   "go-pkg/pkg/util"   "strconv")

const EsStdIdxCount = 10const EsMsgIdxName = "message_"const ALIASE = "_aliase" //别名const TYPE = "_doc"

//account分库func AddMessage(message map[string]interface{}, account string) error {   idx := util.GetHashCode(account, EsStdIdxCount)   id, _ := message["_id"].(string)   delete(message, "_id")   esClient := getClient()   if esClient != nil {      _, err := esClient.Index().Index(EsMsgIdxName   strconv.Itoa(idx)   ALIASE).Type(TYPE).Routing(account).Id(id).BodyJson(message).Do(ctx)      if err != nil {

         return err      }      return nil   } else {

      return errors.New("es client context deadlineexceeded")   }}

//查询数据
func SearchMessageAll(account string, msgContent string) (data []map[string]interface{}, err error) {   idx := util.GetHashCode(account, EsStdIdxCount)   qesMatch := elastic.NewMatchPhraseQuery("name", msgContent).Analyzer("standard") //匹配内容   query := elastic.NewBoolQuery().Must(qesMatch)

   searchResult, err := getClient().Search().TrackTotalHits(false).      Index(EsMsgIdxName   strconv.Itoa(idx)   ALIASE).      Type(TYPE).Routing(account).      Query(query).      From(0).Size(1000).      Do(ctx)   if err != nil {      fmt.Printf("-----search  doc from es err : %v ", err)      return   }   for _, hit := range searchResult.Hits.Hits {      var t map[string]interface{}      err := json.Unmarshal(*hit.Source, &t)       if err != nil {         fmt.Printf("search  doc es Unmarshal err: %v ", err)      }      data = append(data, t)   }   return data, nil}
//util中方法
package utilimport (   "hash/crc32")
func GetHashCode(str string, count int) int {   v := crc32.ChecksumIEEE([]byte(str))   if v < 0 {      v = -v   }   return int(v) % count}

来源:https://www.icode9.com/content-4-822401.html

(0)

相关推荐