婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > golang elasticsearch Client的使用詳解

golang elasticsearch Client的使用詳解

熱門(mén)標(biāo)簽:阿克蘇地圖標(biāo)注 評(píng)價(jià)高的400電話辦理 涿州代理外呼系統(tǒng) 外呼系統(tǒng)顯本地手機(jī)號(hào) 電話機(jī)器人軟件免費(fèi) 壽光微信地圖標(biāo)注 excel地圖標(biāo)注分布數(shù)據(jù) 外呼系統(tǒng)用什么卡 百度地圖標(biāo)注后傳給手機(jī)

elasticsearch 的client ,通過(guò) NewClient 建立連接,通過(guò) NewClient 中的 Set.URL設(shè)置訪問(wèn)的地址,SetSniff設(shè)置集群

獲得連接 后,通過(guò) Index 方法插入數(shù)據(jù),插入后可以通過(guò) Get 方法獲得數(shù)據(jù)(最后的測(cè)試用例中會(huì)使用 elasticsearch client 的Get 方法)

func Save(item interface{}) {
    client, err := elastic.NewClient(
  elastic.SetURL("http://192.168.174.128:9200/"),
  // Must turn off sniff in docker
  elastic.SetSniff(false),
 )
 
 if err != nil {
  panic(err)
 }
 
 resp, err := client.Index().
  Index("dating_profile").
  Type("zhenai").
  BodyJson(item).
  Do(context.Background()) //contex需要context 包
 if err != nil {
  panic(err)
 }
 
 fmt.Printf("%+v", resp)
 
}

測(cè)試程序,自行定義一個(gè)數(shù)據(jù)結(jié)構(gòu) Profile 進(jìn)行測(cè)試

func TestSave(t *testing.T) {
 profile := model.Profile{
  Age:        34,
  Height:     162,
  Weight:     57,
  Income:     "3001-5000元",
  Gender:     "女",
  Name:       "安靜的雪",
  XingZuo:    "牡羊座",
  Occupation: "人事/行政",
  Marriage:   "離異",
  House:      "已購(gòu)房",
  Hukou:      "山東菏澤",
  Education:  "大學(xué)本科",
  Car:        "未購(gòu)車(chē)",
 }
 
 Save(profile)
}

go test 成功

通過(guò) Get 方法查看數(shù)據(jù)是否存在elasticsearch 中

我們?cè)趖est中panic,在函數(shù)中講錯(cuò)誤返回。在從elastisearch中 取出存入的數(shù)據(jù),與我們定義的數(shù)據(jù)進(jìn)行比較,

所以save中需要將插入數(shù)據(jù)的Id返回出來(lái)

func Save(item interface{}) (id string, err error) {
	client, err := elastic.NewClient(
		elastic.SetURL("http://192.168.174.128:9200/"),
		// Must turn off sniff in docker
		elastic.SetSniff(false),
	)
 
	if err != nil {
		return "", err
	}
 
	resp, err := client.Index().
		Index("dating_profile").
		Type("zhenai").
		BodyJson(item).
		Do(context.Background())
	if err != nil {
		return "", err
	}
 
	return resp.Id, nil
 
}

測(cè)試用例

package persist
 
import (
	"context"
	"encoding/json"
	"my_crawler_single/model"
	"testing"
 
	elastic "gopkg.in/olivere/elastic.v5"
)
 
func TestSave(t *testing.T) {
	expected := model.Profile{
		Age:        34,
		Height:     162,
		Weight:     57,
		Income:     "3001-5000元",
		Gender:     "女",
		Name:       "安靜的雪",
		XingZuo:    "牡羊座",
		Occupation: "人事/行政",
		Marriage:   "離異",
		House:      "已購(gòu)房",
		Hukou:      "山東菏澤",
		Education:  "大學(xué)本科",
		Car:        "未購(gòu)車(chē)",
	}
 
	id, err := Save(expected)
	if err != nil {
		panic(err)
	}
 
	client, err := elastic.NewClient(
		elastic.SetURL("http://192.168.174.128:9200/"),
		elastic.SetSniff(false),
	)
	if err != nil {
		panic(err)
	}
 
	resp, err := client.Get().
		Index("dating_profile").
		Type("zhenai").
		Id(id). //查找指定id的那一條數(shù)據(jù)
		Do(context.Background())
	if err != nil {
		panic(err)
	}
 
	t.Logf("%+v", resp)
	//從打印得知,數(shù)據(jù)在resp.Source中,從rest client的截圖也可以知道
 
	var actual model.Profile
	//查看 *resp.Source 可知其數(shù)據(jù)類(lèi)型為[]byte
	err = json.Unmarshal(*resp.Source, actual)
	if err != nil {
		panic(err)
	}
 
	if actual != expected {
		t.Errorf("got %v;expected %v", actual, expected)
	}
}

補(bǔ)充:go-elasticsearch: Elastic官方的Go語(yǔ)言客戶端

說(shuō)明

Elastic官方鼓勵(lì)在項(xiàng)目中嘗試用這個(gè)包,但請(qǐng)記住以下幾點(diǎn):

這個(gè)項(xiàng)目的工作還在進(jìn)行中,并非所有計(jì)劃的功能和Elasticsearch官方客戶端中的標(biāo)準(zhǔn)(故障重試,節(jié)點(diǎn)自動(dòng)發(fā)現(xiàn)等)都實(shí)現(xiàn)了。

API穩(wěn)定性無(wú)法保證。 盡管公共API的設(shè)計(jì)非常謹(jǐn)慎,但它們可以根據(jù)進(jìn)一步的探索和用戶反饋以不兼容的方式進(jìn)行更改。

客戶端的目標(biāo)是Elasticsearch 7.x版本。后續(xù)將添加對(duì)6.x和5.x版本API的支持。

安裝

用go get安裝這個(gè)包:

go get -u github.com/elastic/go-elasticsearch

或者將這個(gè)包添加到go.mod文件:

require github.com/elastic/go-elasticsearch v0.0.0

或者克隆這個(gè)倉(cāng)庫(kù):

git clone https://github.com/elastic/go-elasticsearch.git \u0026\u0026 cd go-elasticsearch

一個(gè)完整的示例:

mkdir my-elasticsearch-app \u0026\u0026 cd my-elasticsearch-appcat \u0026gt; go.mod \u0026lt;\u0026lt;-END  module my-elasticsearch-app  require github.com/elastic/go-elasticsearch v0.0.0ENDcat \u0026gt; main.go \u0026lt;\u0026lt;-END  package main  import (    \u0026quot;log\u0026quot;    \u0026quot;github.com/elastic/go-elasticsearch\u0026quot;  )  func main() {    es, _ := elasticsearch.NewDefaultClient()    log.Println(es.Info())  }ENDgo run main.go

用法

elasticsearch包與另外兩個(gè)包綁定在一起,esapi用于調(diào)用Elasticsearch的API,estransport通過(guò)HTTP傳輸數(shù)據(jù)。

使用elasticsearch.NewDefaultClient()函數(shù)創(chuàng)建帶有以下默認(rèn)設(shè)置的客戶端:

es, err := elasticsearch.NewDefaultClient()if err != nil {  log.Fatalf(\u0026quot;Error creating the client: %s\u0026quot;, err)}res, err := es.Info()if err != nil {  log.Fatalf(\u0026quot;Error getting response: %s\u0026quot;, err)}log.Println(res)// [200 OK] {//   \u0026quot;name\u0026quot; : \u0026quot;node-1\u0026quot;,//   \u0026quot;cluster_name\u0026quot; : \u0026quot;go-elasticsearch\u0026quot;// ...

注意:當(dāng)導(dǎo)出ELASTICSEARCH_URL環(huán)境變量時(shí),它將被用作集群端點(diǎn)。

使用elasticsearch.NewClient()函數(shù)(僅用作演示)配置該客戶端:

cfg := elasticsearch.Config{  Addresses: []string{    \u0026quot;http://localhost:9200\u0026quot;,    \u0026quot;http://localhost:9201\u0026quot;,  },  Transport: \u0026http.Transport{    MaxIdleConnsPerHost:   10,    ResponseHeaderTimeout: time.Second,    DialContext:           (\u0026net.Dialer{Timeout: time.Second}).DialContext,    TLSClientConfig: \u0026tls.Config{      MaxVersion:         tls.VersionTLS11,      InsecureSkipVerify: true,    },  },}es, err := elasticsearch.NewClient(cfg)// ...

下面的示例展示了更復(fù)雜的用法。它從集群中獲取Elasticsearch版本,同時(shí)索引幾個(gè)文檔,并使用響應(yīng)主體周?chē)囊粋€(gè)輕量包裝器打印搜索結(jié)果。

// $ go run _examples/main.gopackage mainimport (  \u0026quot;context\u0026quot;  \u0026quot;encoding/json\u0026quot;  \u0026quot;log\u0026quot;  \u0026quot;strconv\u0026quot;  \u0026quot;strings\u0026quot;  \u0026quot;sync\u0026quot;  \u0026quot;github.com/elastic/go-elasticsearch\u0026quot;  \u0026quot;github.com/elastic/go-elasticsearch/esapi\u0026quot;)func main() {  log.SetFlags(0)  var (    r  map[string]interface{}    wg sync.WaitGroup  )  // Initialize a client with the default settings.  //  // An `ELASTICSEARCH_URL` environment variable will be used when exported.  //  es, err := elasticsearch.NewDefaultClient()  if err != nil {    log.Fatalf(\u0026quot;Error creating the client: %s\u0026quot;, err)  }  // 1. Get cluster info  //  res, err := es.Info()  if err != nil {    log.Fatalf(\u0026quot;Error getting response: %s\u0026quot;, err)  }  // Deserialize the response into a map.  if err := json.NewDecoder(res.Body).Decode(\u0026r); err != nil {    log.Fatalf(\u0026quot;Error parsing the response body: %s\u0026quot;, err)  }  // Print version number.  log.Printf(\u0026quot;~~~~~~~\u0026gt; Elasticsearch %s\u0026quot;, r[\u0026quot;version\u0026quot;].(map[string]interface{})[\u0026quot;number\u0026quot;])  // 2. Index documents concurrently  //  for i, title := range []string{\u0026quot;Test One\u0026quot;, \u0026quot;Test Two\u0026quot;} {    wg.Add(1)    go func(i int, title string) {      defer wg.Done()      // Set up the request object directly.      req := esapi.IndexRequest{        Index:      \u0026quot;test\u0026quot;,        DocumentID: strconv.Itoa(i + 1),        Body:       strings.NewReader(`{\u0026quot;title\u0026quot; : \u0026quot;` + title + `\u0026quot;}`),        Refresh:    \u0026quot;true\u0026quot;,      }      // Perform the request with the client.      res, err := req.Do(context.Background(), es)      if err != nil {        log.Fatalf(\u0026quot;Error getting response: %s\u0026quot;, err)      }      defer res.Body.Close()      if res.IsError() {        log.Printf(\u0026quot;[%s] Error indexing document ID=%d\u0026quot;, res.Status(), i+1)      } else {        // Deserialize the response into a map.        var r map[string]interface{}        if err := json.NewDecoder(res.Body).Decode(\u0026r); err != nil {          log.Printf(\u0026quot;Error parsing the response body: %s\u0026quot;, err)        } else {          // Print the response status and indexed document version.          log.Printf(\u0026quot;[%s] %s; version=%d\u0026quot;, res.Status(), r[\u0026quot;result\u0026quot;], int(r[\u0026quot;_version\u0026quot;].(float64)))        }      }    }(i, title)  }  wg.Wait()  log.Println(strings.Repeat(\u0026quot;-\u0026quot;, 37))  // 3. Search for the indexed documents  //  // Use the helper methods of the client.  res, err = es.Search(    es.Search.WithContext(context.Background()),    es.Search.WithIndex(\u0026quot;test\u0026quot;),    es.Search.WithBody(strings.NewReader(`{\u0026quot;query\u0026quot; : { \u0026quot;match\u0026quot; : { \u0026quot;title\u0026quot; : \u0026quot;test\u0026quot; } }}`)),    es.Search.WithTrackTotalHits(true),    es.Search.WithPretty(),  )  if err != nil {    log.Fatalf(\u0026quot;ERROR: %s\u0026quot;, err)  }  defer res.Body.Close()  if res.IsError() {    var e map[string]interface{}    if err := json.NewDecoder(res.Body).Decode(\u0026e); err != nil {      log.Fatalf(\u0026quot;error parsing the response body: %s\u0026quot;, err)    } else {      // Print the response status and error information.      log.Fatalf(\u0026quot;[%s] %s: %s\u0026quot;,        res.Status(),        e[\u0026quot;error\u0026quot;].(map[string]interface{})[\u0026quot;type\u0026quot;],        e[\u0026quot;error\u0026quot;].(map[string]interface{})[\u0026quot;reason\u0026quot;],      )    }  }  if err := json.NewDecoder(res.Body).Decode(\u0026r); err != nil {    log.Fatalf(\u0026quot;Error parsing the response body: %s\u0026quot;, err)  }  // Print the response status, number of results, and request duration.  log.Printf(    \u0026quot;[%s] %d hits; took: %dms\u0026quot;,    res.Status(),    int(r[\u0026quot;hits\u0026quot;].(map[string]interface{})[\u0026quot;total\u0026quot;].(map[string]interface{})[\u0026quot;value\u0026quot;].(float64)),    int(r[\u0026quot;took\u0026quot;].(float64)),  )  // Print the ID and document source for each hit.  for _, hit := range r[\u0026quot;hits\u0026quot;].(map[string]interface{})[\u0026quot;hits\u0026quot;].([]interface{}) {    log.Printf(\u0026quot; * ID=%s, %s\u0026quot;, hit.(map[string]interface{})[\u0026quot;_id\u0026quot;], hit.(map[string]interface{})[\u0026quot;_source\u0026quot;])  }  log.Println(strings.Repeat(\u0026quot;=\u0026quot;, 37))}// ~~~~~~~\u0026gt; Elasticsearch 7.0.0-SNAPSHOT// [200 OK] updated; version=1// [200 OK] updated; version=1// -------------------------------------// [200 OK] 2 hits; took: 7ms//  * ID=1, map[title:Test One]//  * ID=2, map[title:Test Two]// =====================================

如上述示例所示,esapi包允許通過(guò)兩種不同的方式調(diào)用Elasticsearch API:通過(guò)創(chuàng)建結(jié)構(gòu)(如IndexRequest),并向其傳遞上下文和客戶端來(lái)調(diào)用其Do()方法,或者通過(guò)客戶端上可用的函數(shù)(如WithIndex())直接調(diào)用其上的Search()函數(shù)。更多信息請(qǐng)參閱包文檔。

estransport包處理與Elasticsearch之間的數(shù)據(jù)傳輸。 目前,這個(gè)實(shí)現(xiàn)只占據(jù)很小的空間:它只在已配置的集群端點(diǎn)上進(jìn)行循環(huán)。后續(xù)將添加更多功能:重試失敗的請(qǐng)求,忽略某些狀態(tài)代碼,自動(dòng)發(fā)現(xiàn)群集中的節(jié)點(diǎn)等等。

Examples

_examples文件夾包含許多全面的示例,可幫助你上手使用客戶端,包括客戶端的配置和自定義,模擬單元測(cè)試的傳輸,將客戶端嵌入自定義類(lèi)型,構(gòu)建查詢,執(zhí)行請(qǐng)求和解析回應(yīng)。

許可證

遵循Apache License 2.0版本。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • Django對(duì)接elasticsearch實(shí)現(xiàn)全文檢索的示例代碼
  • Django利用elasticsearch(搜索引擎)實(shí)現(xiàn)搜索功能
  • golang操作elasticsearch的實(shí)現(xiàn)
  • Django項(xiàng)目之Elasticsearch搜索引擎的實(shí)例
  • django使用haystack調(diào)用Elasticsearch實(shí)現(xiàn)索引搜索
  • Go語(yǔ)言Elasticsearch數(shù)據(jù)清理工具思路詳解

標(biāo)簽:梅河口 雞西 吐魯番 銅川 重慶 蘭州 汕頭 欽州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang elasticsearch Client的使用詳解》,本文關(guān)鍵詞  golang,elasticsearch,Client,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《golang elasticsearch Client的使用詳解》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于golang elasticsearch Client的使用詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久久99精品免费观看不卡| 欧美日韩国产美| 欧美成人性战久久| 成人午夜视频在线| 午夜电影久久久| 久久亚洲一级片| 91丝袜高跟美女视频| 日韩av中文字幕一区二区三区| www.日韩精品| www.亚洲精品| 国产乱子伦视频一区二区三区 | 国产日韩一级二级三级| 亚洲成人一区在线| 欧美伊人久久久久久久久影院| 91精品国产福利| 欧美成人aa大片| 亚洲女人****多毛耸耸8| 免费成人你懂的| 成人午夜激情视频| 国产乱国产乱300精品| 亚洲综合在线视频| 久久久五月婷婷| 欧美一区二区在线视频| 91香蕉视频在线| 懂色av一区二区三区蜜臀| 日本欧美大码aⅴ在线播放| 日韩国产一区二| 美腿丝袜在线亚洲一区| 日韩高清电影一区| 一区二区三区高清不卡| 国产欧美日韩久久| 亚洲成人精品在线观看| 成人美女视频在线观看18| 在线影视一区二区三区| 欧美精品aⅴ在线视频| 国产亚洲成av人在线观看导航| 色呦呦国产精品| 久久精品人人爽人人爽| 一区二区三区免费看视频| 日本亚洲欧美天堂免费| 粉嫩嫩av羞羞动漫久久久| 在线观看免费亚洲| 亚洲国产岛国毛片在线| 亚洲午夜在线视频| 成人午夜电影网站| 久久先锋影音av鲁色资源| 丝袜亚洲精品中文字幕一区| 国产精品系列在线观看| 五月天国产精品| 最新中文字幕一区二区三区| 亚洲欧洲美洲综合色网| 蜜桃精品在线观看| 久久精品噜噜噜成人av农村| 久久久不卡网国产精品一区| 欧美一区二区三区视频在线观看 | av资源网一区| 欧美裸体bbwbbwbbw| 亚洲国产婷婷综合在线精品| 成人美女在线观看| 久久精品一区四区| 国产一区二区三区免费| 欧美成人免费网站| 亚洲va天堂va国产va久| 亚洲素人一区二区| 成人免费不卡视频| 久久国产精品露脸对白| 日韩三级视频在线观看| 久久综合九色综合97婷婷女人| 欧美日韩亚洲综合在线| 91色婷婷久久久久合中文| 日本vs亚洲vs韩国一区三区| 中文字幕制服丝袜一区二区三区| 欧美亚洲自拍偷拍| 久久99国产精品免费| 国产日产欧美一区二区视频| 丁香婷婷综合激情五月色| 亚洲免费成人av| 中文字幕欧美国产| 日韩一区和二区| 欧美xxxxx裸体时装秀| 在线亚洲一区二区| 国产91精品一区二区麻豆网站| 天天操天天综合网| √…a在线天堂一区| 日韩一区二区三区视频| 99久久国产综合精品女不卡| 久久99精品国产91久久来源| 亚洲欧美国产毛片在线| 国产精品短视频| 国产精品久久一卡二卡| 中文字幕永久在线不卡| 亚洲欧洲国产日本综合| 午夜国产不卡在线观看视频| 秋霞午夜av一区二区三区| 成人18视频日本| 久久精品视频在线免费观看| 美女视频黄久久| 91麻豆精品国产自产在线观看一区| 国产日产精品一区| 日韩国产在线观看| 91麻豆精品国产综合久久久久久| 午夜精品福利久久久| 五月激情综合婷婷| 国产精品成人一区二区艾草 | 成人18视频日本| 欧美日韩国产中文| 久久久欧美精品sm网站| 五月婷婷综合在线| 成人av午夜影院| 国产性做久久久久久| 亚洲蜜臀av乱码久久精品蜜桃| 青青草97国产精品免费观看 | 久久疯狂做爰流白浆xx| 91美女片黄在线| 国产精品美女一区二区| 国产成人av网站| 精品欧美乱码久久久久久1区2区 | 欧美三级在线视频| 中文字幕在线一区| 国产成人精品一区二区三区四区| 欧美草草影院在线视频| 麻豆国产精品视频| 91精品国产色综合久久不卡蜜臀| 亚洲成av人片| 精品国产精品一区二区夜夜嗨| 奇米影视在线99精品| 精品日韩成人av| 国产成人午夜视频| 综合分类小说区另类春色亚洲小说欧美 | 日韩欧美国产一区在线观看| 免费观看91视频大全| 中文字幕va一区二区三区| 福利电影一区二区三区| 亚洲欧洲日产国码二区| 欧美日韩一二区| 精品一区二区免费在线观看| 国产日韩欧美a| 欧美日韩国产不卡| 成人午夜免费av| 婷婷开心激情综合| www激情久久| 欧美日韩的一区二区| 99麻豆久久久国产精品免费| 奇米精品一区二区三区四区| 欧美韩国日本一区| 久久综合中文字幕| 欧美久久久久久蜜桃| av激情成人网| 粉嫩aⅴ一区二区三区四区| 麻豆91在线播放免费| 日本三级亚洲精品| 亚洲成人777| 亚洲va国产天堂va久久en| 一区在线观看视频| 中文字幕av一区二区三区高| 久久色在线观看| 精品久久久久99| 一区二区成人在线| 欧美另类久久久品| 成人毛片在线观看| 国产91精品露脸国语对白| 久久99日本精品| 日韩国产在线一| 亚洲国产成人av网| 欧美激情一区二区三区不卡 | 日韩电影在线一区二区三区| 久久精品亚洲精品国产欧美kt∨| 欧美日韩国产首页| 欧美在线免费观看亚洲| 91国偷自产一区二区三区成为亚洲经典 | 亚洲最大色网站| 一区二区三区中文字幕电影| 一区二区三区四区精品在线视频| 亚洲老妇xxxxxx| 三级欧美在线一区| 国产精品一区二区三区网站| 国产一区在线看| 欧美日韩另类一区| 中文字幕欧美区| 日本vs亚洲vs韩国一区三区| 99精品国产热久久91蜜凸| 欧美人与禽zozo性伦| 国产精品美女久久久久久久| 亚洲高清中文字幕| 国产很黄免费观看久久| 欧美精品粉嫩高潮一区二区| 国产日韩影视精品| 久久99国产精品久久| 91久久精品一区二区| 国产精品女人毛片| 国产乱一区二区| 欧美体内she精高潮| 国产精品久久久久久久久图文区 | 2019国产精品| 日韩专区一卡二卡| 欧美视频在线一区| 午夜久久福利影院| 91丨porny丨蝌蚪视频| 国产女人aaa级久久久级 | 国产三级三级三级精品8ⅰ区|