Elasticsearch删除/更新index1和index2

时间:2016-11-04 05:35:20

标签: search elasticsearch

如果我有两个索引,Ex:sample1和sample2。 如果我删除或更新sample1中的值,那么相应的文档也应该在sample2中删除或更新?

数据:样本1:{名称:'汤姆',ID:' 1',城市:' xx',州,' yy&#39 ;,国家:' zz'}        sample2:{id:' 1',city:' xx',state,' yy',country:' zz'} 如果我删除了ID:' 1'然后应从服务器端本身的索引中删除此文档。这该怎么做 ? 问题是如果我删除值separatley然后如果我从一个索引删除值后最终出现网络问题,其他索引将有值如何避免这个?

4 个答案:

答案 0 :(得分:2)

您可以使用bulk API执行此操作,您可以更好地保证删除/更新操作成功或失败,因为所有操作都发生在单个网络呼叫中:

删除两个不同指数的文件:

POST _bulk
{"delete": {"_index": "index1", "_type": "type1", "_id": "1"}}
{"delete": {"_index": "index2", "_type": "type2", "_id": "1"}}

用于更新两个不同索引中的两个文档:

POST _bulk
{"index": {"_index": "index1", "_type": "type1", "_id": "1"}}
{"name": "Tom", id: "1", "city": "xx", "state": "yy", "country": "zz"}
{"index": {"_index": "index2", "_type": "type2", "_id": "1"}}
{"id": "1", "city": "xx", "state": "yy", "country": "zz"}

<强>更新

在讨论之后,似乎所需的解决方案是使用

的混合

答案 1 :(得分:1)

使用elasticsearch没有干净的方法。您想要/需要的感觉就像交易一样,弹性无法实现。您可以做的是使用2个查询执行批量请求以更新/删除其中的项目。仍然你必须检查批量的响应,看看两个查询是否进展顺利。其中一个失败的可能性可能会小一些。

答案 2 :(得分:0)

我不认为你可以同时做两件事,我的意思是在两个不同的索引中删除同一个文件。

但是,可以使用Delete By Query API通过提供matchin查询来删除索引中的文档,以便删除相应的文档。

来源:Delete By Query API

答案 3 :(得分:0)

Elasticsearch无法保证它会以原子方式执行这两项操作,例如RDB中的事务。我建议查看nested documentsparent/child relationships以了解Elasticsearch通过加入文档了解的内容。

这样,如果你删除了父母,孩子也会被删除。