登录
首页 >  Golang >  Go问答

使用elasticsearch原子操作更新

来源:stackoverflow

时间:2024-03-30 11:30:29 120浏览 收藏

本篇文章向大家介绍《使用elasticsearch原子操作更新》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。

问题内容

func (d *Dynamic) Like(ctx *gin.Context) {
    var (
        req message.Like
        err error
        buf bytes.Buffer
    )
    if err = ctx.ShouldBind(&req); err != nil {
        d.ResponseJson(ctx, 400, err.Error(), nil)
        return
    }
    doc := map[string]interface{}{
        "doc": map[string]interface{}{
            "like_number": 1,
        },
    }
    if err := json.NewEncoder(&buf).Encode(doc); err != nil {
        fmt.Printf("%v", err.Error())
    }
    resp, err := config.Global.ES.Update("live_dynamic_list", req.DynamicId, &buf, config.Global.ES.Update.WithDocumentType("doc"))
    fmt.Printf("%v", resp)
    if err != nil {
        d.ResponseJson(ctx, 400, err.Error(), nil)
        return
    }
    d.ResponseJson(ctx, 200, "success", nil)
}
  • 我希望在自身基础上实现 like_number + 1
  • 例如,like number当前值为69,执行代码后应该+1,即70。
  • 我使用的包是 github.com/elastic/go-elasticsearch/v7

解决方案


通常会执行原子更新(例如就地增量)via scripts

POST live_dynamic_list/_update/doc_id
{
  "script" : {
    "source": "ctx._source.like_number += params.increment",
    "lang": "painless",
    "params" : {
      "increment" : 1
    }
  }
}

Here's how 您可以在 go 中使用此类更新脚本。

理论要掌握,实操不能落!以上关于《使用elasticsearch原子操作更新》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>