为了账号安全,请及时绑定邮箱和手机立即绑定

在 google go 中使用 Olivere/elastic 更新 ElasticSearch

在 google go 中使用 Olivere/elastic 更新 ElasticSearch

Go
青春有我 2022-01-17 20:13:12
我正在使用 go 在弹性搜索中插入一条记录,如此处所述:https ://github.com/olivere/elastic 现在,如果我必须部分更新它(假设只有一个像“名称”这样的条目),那么我想使用更新 API。我找不到任何描述如何在oilvere/elastic 中使用此API/函数的文档。我想知道是否有人以前使用过这个并且可以帮助我。
查看完整描述

3 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

所以,我终于让这件事起作用了。这是我用来完成它的代码。


update, err := client.Update().Index("test3").Type("user").Id("2").Doc(map[string]interface{}{"location": message}).Do()

fmt.Println("updated id: ", update.Id)

这对我来说很好。


我尝试了另一种方法来更新它,但它不起作用。我把它贴在这里,以便人们可以查看和检查。是这样的。


update := client.Update().Index("test3").Type("user").Id("2").Script(elastic.NewScript("ctx._source.location = loc").Params(map[string]interface{}{"loc": message}).Lang("groovy"))

fmt.Println("updated id: ", update.Id)

希望这对某人有帮助!


查看完整回答
反对 回复 2022-01-17
?
冉冉说

TA贡献1877条经验 获得超1个赞

如果您使用的是github.com/olivere/elastic,请务必检查单元测试。它们不仅可以作为更改的安全网,还可以说明如何使用该库。例如update_test.goupdate_integration_test.go附带了如何使用文档中解释的语法的示例列表。


查看完整回答
反对 回复 2022-01-17
?
弑天下

TA贡献1818条经验 获得超8个赞

如果你想使用脚本,这里是一个条件更新的例子:


_, err := client.UpdateByQuery().

        Query(query).

        Index(index).

        Script(elastic.NewScript("ctx._source = tag").Params(map[string]interface{}{"tag": doc}).Lang("groovy")).

        Type(docType).IgnoreUnavailable(true).

        Do(ctx)


index是文档所在的 ES 索引名称。 查询具有所有必要条件(例如:仅当年龄>18 时才更新文档)。有关查询的更多知识,请参阅此处。查询的输出将在 ctx.source 中可用,这里我将其设置为我传递的参数。您还可以执行以下操作: "ctx.source.salary = sal" 在这种情况下,sal 将是您将动态传递的参数之一。我希望,它有帮助。


查看完整回答
反对 回复 2022-01-17
  • 3 回答
  • 0 关注
  • 463 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信