load default settings,load default

  

     

  

  说明弹性的官方鼓励在项目中尝试用这个包,但请记住以下几点:   

  

  这个项目的工作还在进行中,并非所有计划的功能和弹性搜索官方客户端中的标准(故障重试,节点自动发现等)都实现了API .稳定性无法保证。尽管公共应用程序接口的设计非常谨慎,但它们可以根据进一步的探索和用户反馈以不兼容的方式进行更改。客户端的目标是Elasticsearch 7.x版本。后续将添加对6.x和5.x版本应用程序接口的支持。安装用去拿安装这个包:   

  

  复制代码   

  

  去找github.com/elastic/go-elasticsearch吧或者将这个包添加到go.mod文件:   

  

  复制代码   

  

  需要github.com/elastic/go-elasticsearch版本0.0.0或者克隆这个仓库:   

  

  复制代码   

  

  饭桶克隆https://github.com/elastic/go-elasticsearch.git CD go-弹性搜索一个完整的示例:   

  

  复制代码   

  

  mkdir my-elastic search-app CD my-elastic search-app cat go。调制端模块我的弹性搜索应用需要github.com/elastic/go-elasticsearch v 0。0 .0结束cat main。go-结束包主导入(' log ' ' github。com/elastic/go-elastic search ')func main(){ es,_ :=elasticsearch .NewDefaultClient()日志Println(es .Info()) }END go run main.go用法弹性搜索包与另外两个包绑定在一起,esapi用于调用弹性搜索的API,电子传输通过超文本传送协议传输数据。   

  

  使用弹性搜索NewDefaultClient()函数创建带有以下默认设置的客户端:   

  

  复制代码   

  

  es,err :=elasticsearch .NewDefaultClient()if err!=nil { log .Fatalf('创建客户端时出错: %s ',err)} res,err :=es .Info()if err!=nil { log .Fatalf('获取响应时出错: %s ',err)}日志println(RES)//200 OK {//' name ' : ' node-1 ',//' cluster _ name ' : ' go-elastic search '//.注意:当导出ELASTICSEARCH_URL环境变量时,它将被用作集群端点。   

  

  使用弹性搜索。新客户端()函数(仅用作演示)配置该客户端:   

  

  复制代码   

  

  cfg :=elasticsearch .config { addresses : string { ' http://localhost :9200 ',' http://localhost:9201 ',},Transport: http .transport { maxidleconsperhost : 10,ResponseHeaderTimeout: time .二、DialContext: (net .拨号器{Timeout: time .第二})。DialContext,TLSClientConfig: tls .配置{最大版本: tls .VersionTLS11,InsecureSkipVerify: true,},},} es,err :=elasticsearch .新客户端(cfg)//.下面的示例展示了更复杂的用法。它从集群中获取弹性搜索版本,同时索引几个文档,并使用响应主体周围的一个轻量包装器打印搜索结果。   

  

  复制代码   

  

  //$ go运行_examples/main.go包主导入(' context ' ' encoding/JSON ' ' log ' ' strconv ' ' strings ' ' sync ' ' github。com/elastic/go-elastic search ' ' github。com/elastic/go-elastic   

search/esapi") func main() { log.SetFlags(0) var ( r mapinterface{} 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("Error creating the client: %s", err) } // 1. Get cluster info // res, err := es.Info() if err != nil { log.Fatalf("Error getting response: %s", err) } // Deserialize the response into a map. if err := json.NewDecoder(res.Body).Decode(&r); err != nil { log.Fatalf("Error parsing the response body: %s", err) } // Print version number. log.Printf("~~~~~~~> Elasticsearch %s", r<"version">.(mapinterface{})<"number">) // 2. Index documents concurrently // for i, title := range <>string{"Test One", "Test Two"} { wg.Add(1) go func(i int, title string) { defer wg.Done() // Set up the request object directly. req := esapi.IndexRequest{ Index: "test", DocumentID: strconv.Itoa(i + 1), Body: strings.NewReader(`{"title" : "` + title + `"}`), Refresh: "true", } // Perform the request with the client. res, err := req.Do(context.Background(), es) if err != nil { log.Fatalf("Error getting response: %s", err) } defer res.Body.Close() if res.IsError() { log.Printf("<%s> Error indexing document ID=%d", res.Status(), i+1) } else { // Deserialize the response into a map. var r mapinterface{} if err := json.NewDecoder(res.Body).Decode(&r); err != nil { log.Printf("Error parsing the response body: %s", err) } else { // Print the response status and indexed document version. log.Printf("<%s> %s; version=%d", res.Status(), r<"result">, int(r<"_version">.(float64))) } } }(i, title) } wg.Wait() log.Println(strings.Repeat("-", 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("test"), es.Search.WithBody(strings.NewReader(`{"query" : { "match" : { "title" : "test" } }}`)), es.Search.WithTrackTotalHits(true), es.Search.WithPretty(), ) if err != nil { log.Fatalf("ERROR: %s", err) } defer res.Body.Close() if res.IsError() { var e mapinterface{} if err := json.NewDecoder(res.Body).Decode(&e); err != nil { log.Fatalf("error parsing the response body: %s", err) } else { // Print the response status and error information. log.Fatalf("<%s> %s: %s", res.Status(), e<"error">.(mapinterface{})<"type">, e<"error">.(mapinterface{})<"reason">, ) } } if err := json.NewDecoder(res.Body).Decode(&r); err != nil { log.Fatalf("Error parsing the response body: %s", err) } // Print the response status, number of results, and request duration. log.Printf( "<%s> %d hits; took: %dms", res.Status(), int(r<"hits">.(mapinterface{})<"total">.(mapinterface{})<"value">.(float64)), int(r<"took">.(float64)), ) // Print the ID and document source for each hit. for _, hit := range r<"hits">.(mapinterface{})<"hits">.(<>interface{}) { log.Printf(" * ID=%s, %s", hit.(mapinterface{})<"_id">, hit.(mapinterface{})<"_source">) } log.Println(strings.Repeat("=", 37))} // ~~~~~~~> Elasticsearch 7.0.0-SNAPSHOT// <200 OK> updated; version=1// <200 OK> updated; version=1// -------------------------------------// <200 OK> 2 hits; took: 7ms// * ID=1, map// * ID=2, map// =====================================如上述示例所示,esapi包允许通过两种不同的方式调用 Elasticsearch API:通过创建结构(如IndexRequest),并向其传递上下文和客户端来调用其Do()方法,或者通过客户端上可用的函数(如WithIndex())直接调用其上的Search()函数。更多信息请参阅包文档。

  

estransport包处理与 Elasticsearch 之间的数据传输。 目前,这个实现只占据很小的空间:它只在已配置的集群端点上进行循环。后续将添加更多功能:重试失败的请求,忽略某些状态代码,自动发现群集中的节点等等。

  

Examples_examples文件夹包含许多全面的示例,可帮助你上手使用客户端,包括客户端的配置和自定义,模拟单元测试的传输,将客户端嵌入自定义类型,构建查询,执行请求和解析回应。

  

许可证遵循 Apache License 2.0 版本。

  

参考链接:

  

https://github.com/elastic/go-elasticsearch#go-elasticsearch

相关文章