猿问

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

我有一个文档数组来批量索引使用 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


繁花如伊
浏览 79回答 1
1回答

桃花长相依

找不到官方文档的详细信息。但是,查看此链接,建议在并行请求的工作线程(go例程)之间共享客户端。客户端连接是在包初始化时创建的,并且以并行方式发生的后续请求共享同一客户端。从上面的链接package httpexampleimport (    "github.com/elastic/go-elasticsearch/v7")var client *elasticsearch.Clientfunc 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 parallelfunc HttpExample(w http.ResponseWriter, r *http.Request) {    ... # Client usage}注意:我是专家,可以推荐使用多个批量索引器。
随时随地看视频慕课网APP

相关分类

Go
我要回答