- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我注意到,如果我想将数据批量发送到 elasticsearch,我可以使用 BulkIndexer。如 Elastigo 文档中所述
A bulk indexer creates goroutines, and channels for connecting and sending data to elasticsearch in bulk, using buffers.
elastigo 中的代码以批量插入
var c_es = elastigo.NewConn()
var indexer = c_es.NewBulkIndexer(50)
func insertInBulkElastic(){
//Create a custom error function when inserting data into elasticsearch
//in bulk
indexer.Sender = func(buf *bytes.Buffer) error {
// @buf is the buffer of docs about to be written
respJson, err := c_es.DoCommand("POST", "/_bulk", nil, buf)
if err != nil {
// handle it better than this
fmt.Println("Error", string(respJson)) //
fmt.Println("Error", err)
}
if err == nil {
fmt.Println("The data was inserted successfullly to elastic search")
}
return err
}
}
有谁知道如何使用 olivere for golang 发送批量请求?
谢谢
最佳答案
这是一个在 Go 中使用 olivere
的工作示例。您可以阅读有关 BulkProcessor 的更多信息 here
希望这有帮助:)
package main
import (
"context"
"log"
"time"
elastic "gopkg.in/olivere/elastic.v5"
)
func main() {
options := []elastic.ClientOptionFunc{
elastic.SetHealthcheck(true),
elastic.SetHealthcheckTimeout(20 * time.Second),
elastic.SetSniff(false),
elastic.SetHealthcheckInterval(30 * time.Second),
elastic.SetURL("http://127.0.0.1:9200"),
elastic.SetRetrier(elastic.NewBackoffRetrier(elastic.NewConstantBackoff(5 * time.Second))),
}
client, err := elastic.NewClient(options...)
if err != nil {
panic(err)
}
// ensure index exist
exists, err := client.IndexExists("my_index").Do(context.Background())
if err != nil {
panic(err)
}
if !exists {
if _, err := client.CreateIndex("my_index").Do(context.Background()); err != nil {
panic(err)
}
}
client.PutMapping().Index("my_index").BodyJson(map[string]interface{}{
"properties": map[string]string{
"name": "keyword",
},
}).Do(context.Background())
// create new bulk processor from client
bulkProcessor, err := elastic.NewBulkProcessorService(client).
Workers(5).
BulkActions(1000).
FlushInterval(1 * time.Second).
After(after).
Do(context.Background())
// now the bulk processor can be reused for entire the app
myDoc := struct {
Name string
}{
Name: "jack",
}
req := elastic.NewBulkIndexRequest()
req.Index("my_index").Type("type").Id("my_doc_id").Doc(myDoc)
// Use Add method to add request into the processor
bulkProcessor.Add(req)
// wait for sometime...
time.Sleep(5 * time.Second)
}
func after(executionID int64, requests []elastic.BulkableRequest, response *elastic.BulkResponse, err error) {
if err != nil {
log.Printf("bulk commit failed, err: %v\n", err)
}
// do what ever you want in case bulk commit success
log.Printf("commit successfully, len(requests)=%d\n", len(requests))
}
关于elasticsearch - 用于 Golang 的 Olivere 包中的 BulkIndexer 用于替换 Elastigo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53424391/
几天来我一直在尝试了解如何使用 Go 基于多个字段进行排序 olivere/elastic .我正在尝试将其翻译成 Go { "sort" : [ "name",
我们目前正在创建 olivere我们 API 中的弹性客户端如下所示: elasticClient, err = elastic.NewClient( elas
我需要一个正确的示例,我可以在其中使用 golang 中的 olivere 将数据插入到 elasticsearch 中。我已经收集了数据,它会打印将要插入的每个数据的结果。问题是没有数据插入elas
https://github.com/olivere/elastic版本 5.x wiki 文档并不清楚 client.Update() 的工作原理。需要完全更改字段并修改数组。即在 wiki 文档的
我有 json,我想使用 https://godoc.org/gopkg.in/olivere/elastic.v5 将其转换为 Elasticsearch 查询 JSON = { "query"
我注意到,如果我想将数据批量发送到 elasticsearch,我可以使用 BulkIndexer。如 Elastigo 文档中所述 A bulk indexer creates goroutines
我在我的 go 应用程序中使用 olivere/elastic 库进行 Elasticsearch 。我有 elasticsearch 文档的特定字段(比如 fieldA)的值列表。我想通过搜索字段
我正在使用 go 在 Elasticsearch 中插入一条记录,如下所述:https://github.com/olivere/elastic现在,如果我必须部分更新它(假设只有一个条目如“名称”)
我需要构建查询来获取 doc.value1 == doc.value2 的文档 { "query": { "bool" : { "filter" : [
我是一名优秀的程序员,十分优秀!