Elasticsearch在index1和index2中删除/更新文档
如果我有两个索引,例如:sample1和sample2。 如果我在sample1中删除或更新了一个值,那么相应的文档也应该在sample2中删除或更新 数据:样本1:{姓名:'Tom',id:'1',城市:'xx',州:'yy',国家:'zz'} 样本2:{id:'1',城市:'xx',州:'yy',国家:'zz'} 如果我删除id:'1',那么应该从服务器端本身的索引中删除此文档。如何做到这一点?Elasticsearch在index1和index2中删除/更新文档,search,elasticsearch,Search,elasticsearch,如果我有两个索引,例如:sample1和sample2。 如果我在sample1中删除或更新了一个值,那么相应的文档也应该在sample2中删除或更新 数据:样本1:{姓名:'Tom',id:'1',城市:'xx',州:'yy',国家:'zz'} 样本2:{id:'1',城市:'xx',州:'yy',国家:'zz'} 如果我删除id:'1',那么应该从服务器端本身的索引中删除此文档。如何做到这一点? 问题是,如果我分别删除这些值,那么如果我在删除一个索引中的值后进入网络问题,那么另一个索引将具有
问题是,如果我分别删除这些值,那么如果我在删除一个索引中的值后进入网络问题,那么另一个索引将具有值如何避免这种情况?我认为您不能同时执行这两个操作,我的意思是删除两个不同索引中的同一文档 但是,通过提供匹配查询,可以使用
deletebyterqueryapi
从索引中删除文档,以便删除相应的文档
来源:使用elasticsearch没有干净的方法可以做到这一点。你想要/需要的感觉就像一笔交易,而这在弹性交易中是不可能的。您可以通过两个查询执行批量请求,以更新/删除其中的项目。仍然需要检查批量的响应,以查看两个查询是否都进行得很好。其中一个操作失败的几率可能会小一些。您可以使用来执行此操作,并且您可以更好地保证删除/更新操作成功或失败,因为所有操作都发生在单个网络调用中: 要删除两个不同索引中的两个文档:
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"}
用于在两个不同索引中更新两个文档:
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"}
更新
在讨论了这一点之后,似乎需要的解决方案是混合使用
- (如果您使用的是ES 2.x,请不要忘记)用于删除多个索引中与国家/地区匹配的文档
- 以及用于更新多个索引中的文档的
这样,如果您删除了父项,则子项也将被删除。我已编辑了我的问题,请您建议从2.0版中删除“按查询删除”。请为最新版本提供任何其他选项?我已经尝试过这个,但不适用于两个索引。删除twitter,新的{“field1”:“tes-1”}这听起来像是一个关系数据库操作,您希望在Elasticsearch中镜像它。。。如果是这样,并且您使用id:1作为伪主键,那么您对Elasticsearch有一些概念上的错误想法。它不是经典rel中的关系数据库。DB的意思是。当我运行批量API更新时,它不工作。我收到此错误。“键入”:“操作\请求\验证\异常”,“原因”:“验证失败:1:未添加任何请求;”在批量删除文档时,您需要确保在最后一行之后有一个新行。我需要按国家/地区字段进行查询。在两个索引中都应删除与文档匹配的国家/地区字段。如何做到这一点?在这种情况下,@Kulansagar提供的查询删除解决方案可能更好地传递sense插件中的查询删除。我已经试过了,但它不起作用。