弹性搜索批量api为每个源/记录指定更新/创建行为

时间:2012-10-05 03:24:04

标签: elasticsearch

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

以下示例似乎执行“更新或创建”

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

希望这只会“创建”,如果index / type / id

存在记录,则不会更新
{ "create" : { "_index" : "test", "_type" : "type1", "_id" : "3" } }
{ "field1" : "value3" }

我愿意提出实现这一目标的最佳方法。如果有人不先到达那里,我会发布任何我想出来的东西。

2 个答案:

答案 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添加任何新文档,然后更新以更改现有文档。