bulk插入 es_「开发问题」Golang插入ES问题

在尝试使用Golang进行bulk插入ES时遇到问题,数据未能成功写入。原因是传入参数为interface{}类型,导致实际为二维数组。另外,插入数据格式错误,应包含key值如""data"":[...], 而非直接的{[...]}。解决方案在于修正参数类型和插入数据格式。" 130671164,10967067,Segment Anything Meta SAM:开创性图像分割模型,"['计算机视觉', '深度学习', '图像处理', '模型开发', '人工智能']
摘要由CSDN通过智能技术生成
c3c10da79fb71740fc1c9448183cd6fd.png

问题描述

func BatchInsert(index string,docment ...interface{}) { bulk := esClient.Bulk() for _,doc:=range docment { insertDoc:=elastic.NewBulkIndexRequest().Index(index).Doc(doc) bulk = bulk.Add(insertDoc) } _, err := bulk.Do(context.Background()) //beelog.Error(response.Errors) if err !=nil{ beelog.Error("Batch Insert ES ERROR:",err) }}

使用以上代码做数据插入。程序显示没有错误。但是ES中没有数据。

原因分析

1、参数列表,因为传入参数的数据类型是interface{}类型,所以当擦换入的数据是Array类型时,参数列表就是Array。比如,传入的为[]string,那么接收时就等价于[][]string。
所以参数 docment为二维数组。doc为数组。类型为[.....]。

2、插入格式,首先我们看下内部代码。此代码为数据的转换,json转码后数据为{[......]}。由于没有key值,所以无法插入。正确格式应该是{"data":[......]}

if r.doc != nil { switch t := r.doc.(type) { default: body, err := json.Marshal(r.doc) if err != nil { return nil, err } lines[1] = string(body) case json.RawMessage: lines[1] = string(t) case *json.RawMessage: lines[1] = string(*t) case string: lines[1] = t case *string: lines[1] = *t }} else { lines[1] = "{}"}

代码修改

func BatchInsert(index string,docment []interface{}) { beelog.Error(docment) bulk := esClient.Bulk() for _,doc:=range docment { insertDoc:=elastic.NewBulkIndexRequest().Index(index).Doc(doc) bulk = bulk.Add(insertDoc) } _, err := bulk.Do(context.Background()) //beelog.Error(response.Errors) if err !=nil{ beelog.Error("Batch Insert ES ERROR:",err) }}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值