golang elasticsearch 批量 insert(upsert)数据 (使用包 olivere/elastic)

Golang · Fecmall · 于 5年前 发布 · 16380 次阅读

golang 和elastic的连接,使用了包:https://github.com/olivere/elastic

将 struct slice 数据批量插入到elasticSearch中

批量插入:

package main

import (
	"fmt"
	"gopkg.in/olivere/elastic.v2"
	"strconv"
)

type Tweet struct {
	User    string `json:"user"`
	Message string `json:"message"`
}

func main() {
	client, err := elastic.NewClient()
	if err != nil {
		fmt.Println("%v", err)
	}

	n := 0
	for i := 0; i < 1000; i++ {
		bulkRequest := client.Bulk()
		for j := 0; j < 10000; j++ {
			n++
			tweet := Tweet{User: "olivere", Message: "Package strconv implements conversions to and from string representations of basic data types. " + strconv.Itoa(n)}
			req := elastic.NewBulkIndexRequest().Index("twitter").Type("tweet").Id(strconv.Itoa(n)).Doc(tweet)
			bulkRequest = bulkRequest.Add(req)
		}
		bulkResponse, err := bulkRequest.Do()
		if err != nil {
			fmt.Println(err)
		}
		if bulkResponse != nil {

		}
		fmt.Println(i)
	}
}

如果批量upsert,那么需要将代码

req := elastic.NewBulkIndexRequest().Index("twitter").Type("tweet").Id(strconv.Itoa(n)).Doc(tweet)

改成

req := elastic.NewBulkUpdateRequest().Index("twitter").Type("tweet").Id(strconv.Itoa(n)).Doc(tweet).DocAsUpsert(true)
共收到 0 条回复
没有找到数据。
添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics