Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elasticsearch在index1和index2中删除/更新文档_Search_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Search,elasticsearch" /> elasticsearch,Search,elasticsearch" />

Elasticsearch在index1和index2中删除/更新文档

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',那么应该从服务器端本身的索引中删除此文档。如何做到这一点? 问题是,如果我分别删除这些值,那么如果我在删除一个索引中的值后进入网络问题,那么另一个索引将具有

如果我有两个索引,例如: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,请不要忘记)用于删除多个索引中与国家/地区匹配的文档
  • 以及用于更新多个索引中的文档的

Elasticsearch不能保证它将以原子方式执行这两个操作,就像RDB中的事务一样。我建议查看或查找Elasticsearch对连接文档的理解


这样,如果您删除了父项,则子项也将被删除。

我已编辑了我的问题,请您建议从2.0版中删除“按查询删除”。请为最新版本提供任何其他选项?我已经尝试过这个,但不适用于两个索引。删除twitter,新的{“field1”:“tes-1”}这听起来像是一个关系数据库操作,您希望在Elasticsearch中镜像它。。。如果是这样,并且您使用id:1作为伪主键,那么您对Elasticsearch有一些概念上的错误想法。它不是经典rel中的关系数据库。DB的意思是。当我运行批量API更新时,它不工作。我收到此错误。“键入”:“操作\请求\验证\异常”,“原因”:“验证失败:1:未添加任何请求;”在批量删除文档时,您需要确保在最后一行之后有一个新行。我需要按国家/地区字段进行查询。在两个索引中都应删除与文档匹配的国家/地区字段。如何做到这一点?在这种情况下,@Kulansagar提供的查询删除解决方案可能更好地传递sense插件中的查询删除。我已经试过了,但它不起作用。