为了账号安全,请及时绑定邮箱和手机立即绑定

可以几个埃斯费。批量索引器共享一个弹性搜索。客户?

可以几个埃斯费。批量索引器共享一个弹性搜索。客户?

Go
繁花如伊 2022-09-26 15:22:56
我有一个文档数组来批量索引使用 github.com/elastic/go-elasticsearch/v8 库。每个文档都可以添加到少数几个不同索引之一,因此我的代码如下所示:    var indexers map[string]esutil.BulkIndexer = make(map[string]esutil.BulkIndexer)        for i := range documents {      var bi esutil.BulkIndexer      var ok bool      var err error      if bi, ok = indexers[documents[i].index]; !ok {         bi, err = esutil.NewBulkIndexer(esutil.BulkIndexerConfig{            Index:         documents[i].index,   // The index name            Client:        client,               // The Elasticsearch client* Same isntance for all indexers*            NumWorkers:    BULK_NUM_WORKERS,     // The number of worker goroutines            FlushBytes:    int(BULK_FLUSHBYTES), // The flush threshold in bytes            FlushInterval: 5 * time.Second,      // The periodic flush interval        })        if err != nil {            fmt.Printf("Error creating the indexer: %s", err)            continue        }        indexers[documents[i].indexName] = bi    }这个想法是我有一个地图,它们都共享相同的实例。所以我的问题是,几个人共享相同的实例是否可行且安全,或者它们各自需要一个单独的实例?esutil.BulkIndexerelasticsearch.Clientesutil.BulkIndexerelasticsearch.Clientelasticsearch.Client
查看完整描述

1 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

找不到官方文档的详细信息。但是,查看此链接,建议在并行请求的工作线程(go例程)之间共享客户端。


客户端连接是在包初始化时创建的,并且以并行方式发生的后续请求共享同一客户端。


从上面的链接


package httpexample

import (

    "github.com/elastic/go-elasticsearch/v7"

)


var client *elasticsearch.Client


func init() {

    var err error


    ... # Client configuration

    client, err = elasticsearch.NewClient(cfg)

    if err != nil {

        log.Fatalf("elasticsearch.NewClient: %v", err)

    }

}

//This method will be called in parallel

func HttpExample(w http.ResponseWriter, r *http.Request) {

    ... # Client usage

}

注意:我是专家,可以推荐使用多个批量索引器。


查看完整回答
反对 回复 2022-09-26
  • 1 回答
  • 0 关注
  • 78 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信