我有一个文档数组来批量索引使用 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
}
注意:我是专家,可以推荐使用多个批量索引器。
- 1 回答
- 0 关注
- 78 浏览
添加回答
举报
0/150
提交
取消