在google go中使用olivere / elastic更新ElasticSearch中的记录

时间:2016-06-23 10:53:19

标签: elasticsearch go

我在弹性搜索中插入一条记录,如下所述:https://github.com/olivere/elastic 现在,如果我必须部分更新它(假设只有一个条目,如'name'),那么我想使用UPDATE API。我找不到任何文档描述如何在oilvere / elastic中使用这个API /函数。我想知道是否有人之前使用过这个并且可以帮助我。

3 个答案:

答案 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.goupdate_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将成为您动态传递的参数之一。我希望这会有所帮助。