1

在某个地方,我的印象是我可以选择“创建”和“创建或更新”。我希望能够为批量上传中的每个源指定 _id 冲突的行为。如果识别的记录不存在,其中一些应该创建,如果存在则更新。如果记录不存在,其他人应该创建,如果存在则什么都不做。

下面的例子似乎做了一个“更新或创建”

{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } }
{ "field1" : "value1" }

如果索引/类型/id 的记录存在,希望这只会“创建”而不更新

{ "create" : { "_index" : "test", "_type" : "type1", "_id" : "3" } }
{ "field1" : "value3" }

我愿意提出实现这一目标的最佳方法的建议。如果有人没有先到达那里,我会发布我发现的任何内容。

4

2 回答 2

0

看起来您将能够在 2.0 中使用脚本功能执行此操作。https://github.com/elasticsearch/elasticsearch/issues/2008

现在我正在用两个请求来做这件事。首先是 _create 以添加任何新文档,然后是更新以更改现有文档。

于 2012-10-20T14:04:42.180 回答
0

我认为操作类型功能应该回答。

从文档中提取

操作类型 索引操作还接受一个op_type可用于强制创建操作,允许put-if-absent行为。使用 create 时,如果索引中已存在该 id 的文档,则索引操作将失败。

下面是一个使用op_type参数的例子:

$ curl -XPUT 'http://localhost:9200/twitter/tweet/1?op_type=create' -d '{
    "user" : "kimchy",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elastic Search"
}'

指定创建的另一个选项是使用以下 URI:

$ curl -XPUT 'http://localhost:9200/twitter/tweet/1/_create' -d '{
    "user" : "kimchy",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elastic Search"
}'
于 2012-10-05T07:05:34.713 回答