在某个地方,我得到的印象是我可以选择“创建”和“创建或更新”。我希望能够为批量上传中的每个源指定_id冲突的行为。如果识别的记录不存在,其中一些应该创建,如果存在则更新。如果记录不存在,其他人应该创建,如果记录不存在则不做。
以下示例似乎执行“更新或创建”
{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } }
{ "field1" : "value1" }
希望这只会“创建”,如果index / type / id
存在记录,则不会更新{ "create" : { "_index" : "test", "_type" : "type1", "_id" : "3" } }
{ "field1" : "value3" }
我愿意提出实现这一目标的最佳方法。如果有人不先到达那里,我会发布任何我想出来的东西。
答案 0 :(得分:0)
我认为操作类型功能应该回答。
摘自doc
操作类型
索引操作还接受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"
}'
指定create的另一个选项是使用以下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"
}'
答案 1 :(得分:0)
看起来您可以使用脚本功能在2.0中执行此操作。 https://github.com/elasticsearch/elasticsearch/issues/2008
现在我正在做两件请求。首先_create添加任何新文档,然后更新以更改现有文档。