【问题标题】:Updating all data elasticsearch更新所有数据 elasticsearch
【发布时间】:2016-08-19 21:05:59
【问题描述】:

有没有办法更新elasticsearch中的所有数据。

在下面的示例中,为外部“1”完成了更新。

curl -XPOST 'localhost:9200/customer/external/1/_update?pretty' -d '
{
 "doc": { "name": "Jane Doe", "age": 20 }
}'

同样,我需要在外部更新我的所有数据。有什么方法或查询来更新所有数据。

【问题讨论】:

  • 这个答案应该会有所帮助:stackoverflow.com/questions/38636348/… 如果您运行的是 ES 1.3.2,则需要预先安装 update-by-query 插件并重新启动集群
  • val 在上面的链接中,它们替换了名称。在这里,我需要在所有外部添加额外的字段(“状态”:“完成”),为此我需要做的。
  • 您可以在脚本中进行许多更改,例如添加新字段、更改现有字段和删除现有字段。
  • 我尝试了以下查询 curl -XPOST 'localhost:9200/tellofy/brand/_update_by_query' -d ' { "script" : "ctx._source.brandprivacy = "false"" }' 我面临以下问题error {"error":"UnavailableShardsException[[tellofy][2] 主分片未激活或未分配给已知节点。超时:[1m],请求:索引 {[tellofy][brand][_update_by_query], source[\n{\n \"script\" : \"ctx._source.brandprivacy = \"false\"\"\n}]}]","status":503}> 你对上面有什么建议吗错误
  • 你的双引号太多了,试试这个:curl -XPOST 'localhost:9200/customer/external/_update_by_query' -d ' { "script" : "ctx._source.brandprivacy = false" }'

标签: elasticsearch elasticsearch1.3.2


【解决方案1】:

更新索引中的所有文档意味着将删除所有文档并索引新文档。这意味着大量的"marked-as-deleted" 文档。

当您运行查询时,ES 会自动过滤掉那些“标记为已删除”的文档,这将对查询的响应时间产生影响。影响有多大取决于数据、用例和查询。

此外,如果您更新所有文档,除非您运行 _force_merge,否则会有一些段(尤其是较大的段)仍然具有“标记为已删除”的文档,并且这些段很难被自动合并Lucene/Elasticsearch。

我的建议是,如果您的索引过程不是太复杂(例如,从关系数据库获取数据并在索引到 ES 之前对其进行处理),则完全删除索引并索引新数据。这可能比更新所有文档更有效。

【讨论】:

  • 但是我有很多数据,我需要更新这些。有什么方法或可能性可以合并或更新而不丢弃。
  • 您可以更新所有这些,但最后您不会拥有像重新索引后那样的索引。您将拥有一个包含一些“标记为已删除”的文档的索引。你需要运行forced merge。您仍然可以更新所有文档并且不强制合并,但可能在查询时可能会产生一些性能影响,因为仍然存在标记为已删除的文档。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
  • 2017-06-17
  • 2021-09-07
  • 2023-03-13
  • 2014-03-10
  • 1970-01-01
相关资源
最近更新 更多