【问题标题】:Elasticsearch delete/update a document in index1 and index2Elasticsearch 删除/更新 index1 和 index2 中的文档
【发布时间】:2016-11-04 05:35:19
【问题描述】:

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

数据 : sample1 : {name: 'Tom', id: '1', city: 'xx', state, 'yy', country: 'zz'} 样本2:{id:'1',城市:'xx',州,'yy',国家:'zz'} 如果我删除 id: '1' 那么这个文档应该从服务器端本身的两个索引中删除。这个怎么做 ? 问题是如果我单独删除值,那么如果我在从一个索引中删除值后最终出现网络问题,那么另一个索引将具有值如何避免这种情况?

【问题讨论】:

  • 这听起来像是您想在 Elasticsearch 中镜像的关系数据库操作...如果是这样并且您使用 id: 1 作为伪主键,那么您对 ​​Elasticsearch 有一些概念上的错误思考.它不是经典 rel 中的关系数据库。数据库含义。

标签: search elasticsearch


【解决方案1】:

您可以使用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"}

更新

经过讨论,似乎需要的解决方案是混合使用

【讨论】:

  • 当我运行批量 API 更新时不起作用。我收到此错误。"type": "action_request_validation_exception", "reason": "Validation Failed: 1: no requests added;"
  • 您需要确保在最后一行之后也有一个新行
  • 批量删除文档时需要按国家字段查询。 country 字段匹配的文件应该在两个索引中删除。如何做到这一点?
  • 在这种情况下,@Kulansagar 的 delete-by-query 解决方案可能会更好
  • 如何在 sense 插件中通过查询传递删除。我已经先尝试过,但它不起作用。
【解决方案2】:

弹性搜索没有干净的方法来做到这一点。你想要/需要的感觉就像是一笔交易,而弹性是不可能的。您可以做的是使用 2 个查询进行批量请求以更新/删除其中的项目。您仍然必须检查批量的响应以查看两个查询是否顺利。其中一个失败的机会可能会小一些。

【讨论】:

    【解决方案3】:

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

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

    来源:Delete By Query API

    【讨论】:

    • 我已经编辑了我的问题,请您提出建议
    • 按查询删除已从 2.0 版本中删除。请建议最新版本的任何其他可用选项?
    • 我已经尝试过了,但不适用于两个索引。删除推特,新 { "field1" : "tes-1" }
    【解决方案4】:

    Elasticsearch 不能保证它会自动执行这两个操作,就像 RDB 中的事务一样。我建议查看 nested documentsparent/child relationships 以了解 Elasticsearch 通过连接文档了解的内容。

    这样,如果你删除了父级,子级也将被删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2021-11-03
      • 2013-10-01
      • 2015-08-31
      相关资源
      最近更新 更多