我在弹性搜索中插入一条记录,如下所述:https://github.com/olivere/elastic 现在,如果我必须部分更新它(假设只有一个条目,如'name'),那么我想使用UPDATE API。我找不到任何文档描述如何在oilvere / elastic中使用这个API /函数。我想知道是否有人之前使用过这个并且可以帮助我。
答案 0 :(得分: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)
希望这有助于某人!
答案 1 :(得分:1)
如果您正在使用github.com/olivere/elastic,请务必检查单元测试。它们不仅可以作为变更的安全网,还可以说明如何使用该库。例如。 update_test.go和update_integration_test.go附带了一系列示例,列出了如何使用documentation中解释的语法。
答案 2 :(得分:0)
如果您想使用脚本,请参见以下条件更新示例:
_, 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)
索引是文档所在的ES索引名称。
查询具有所有必要条件(例如:仅当年龄> 18岁时才更新文档)。有关查询的更多知识,请参阅here。
查询的输出将在ctx.source中可用,在这里我将其设置为我传递的参数。
您还可以执行以下操作:
"ctx.source.salary = sal"
在这种情况下,sal将成为您动态传递的参数之一。我希望这会有所帮助。