如果id已存在,如何使ElasticSearch索引操作失败?

时间:2014-03-19 16:04:48

标签: elasticsearch

我有多个并发进程(两个,确切地说)将索引到相同的id。假设首先完成索引操作I0,然后是索引操作I1I1之前I0可能会被编入索引。无论哪个首先编入索引,I1都应优先于搜索。

2 个答案:

答案 0 :(得分:1)

根据http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-index_.html,版本控制可用于此目的。请务必将I0的版本设置为小于I1的版本。

答案 1 :(得分:1)

您可以为可以与其version关联的更新提供可选的version_type,以保证只使用一个。

补充其文档中发布的示例,您可以手动执行此操作,如:

curl -XPUT 'localhost:9200/twitter/tweet/1?version=1&version_type=external' -d '{
    "message" : "elasticsearch now has versioning support, double cool!"
}'

对于version_type的{​​{1}},您会得到:

  

仅在给定版本严格高于的情况下索引文档   存储文档的版本或者如果没有存在   文献。给定的版本将用作新版本并将使用   与新文件一起存储。

可能值得指出的是,内部版本控制从external开始。