如何在 rails 应用程序中使用带有 ES 2.X 版本的 delete_ by_query 插件从索引中删除所有数据?
How to delete all data from an index using delete_ by_query plugin with ES 2.X versions in rails app?
我已经在我的 rails 4.2.7
应用程序中将我的 elasticsearch
升级到 2.0 version
,并且正在尝试使用 delete-by-query 插件删除所有索引数据。我怎样才能做到这一点?
我正在使用 delete_by_query 这样的方法
Elasticsearch::Model.client
.delete_by_query(index: index_klass.index_name,
body: {query: {match_all: {}}})
但这在 ES 2.X 版本中已弃用。那么我如何使用插件来做到这一点。提前致谢。
你有两个解决方案:
- 升级到 ES 5.0,使 delete-by-query API 回到核心。
- 留在 2.x 并安装 delete-by-query plugin
此后,您的代码将再次运行。
与其删除索引中的所有数据,我强烈建议删除整个索引并重新创建它。
删除文档会将它们标记为已删除,但实际上并不会从磁盘中实际删除它们。当 Elasticsearch 的自动合并过程发生时,这些实际上将被删除。但是,合并过程将只考虑删除某些段文件,而且很肯定您仍然会有磁盘 space 被没有文件的索引使用。有关分段合并的更多信息:https://www.elastic.co/guide/en/elasticsearch/guide/current/merge-process.html and more about the deletion of these documents at merge time - https://www.elastic.co/blog/lucenes-handling-of-deleted-documents
因此,只需删除索引并重新创建索引,您应该会好得多。
我已经在我的 rails 4.2.7
应用程序中将我的 elasticsearch
升级到 2.0 version
,并且正在尝试使用 delete-by-query 插件删除所有索引数据。我怎样才能做到这一点?
我正在使用 delete_by_query 这样的方法
Elasticsearch::Model.client
.delete_by_query(index: index_klass.index_name,
body: {query: {match_all: {}}})
但这在 ES 2.X 版本中已弃用。那么我如何使用插件来做到这一点。提前致谢。
你有两个解决方案:
- 升级到 ES 5.0,使 delete-by-query API 回到核心。
- 留在 2.x 并安装 delete-by-query plugin
此后,您的代码将再次运行。
与其删除索引中的所有数据,我强烈建议删除整个索引并重新创建它。
删除文档会将它们标记为已删除,但实际上并不会从磁盘中实际删除它们。当 Elasticsearch 的自动合并过程发生时,这些实际上将被删除。但是,合并过程将只考虑删除某些段文件,而且很肯定您仍然会有磁盘 space 被没有文件的索引使用。有关分段合并的更多信息:https://www.elastic.co/guide/en/elasticsearch/guide/current/merge-process.html and more about the deletion of these documents at merge time - https://www.elastic.co/blog/lucenes-handling-of-deleted-documents
因此,只需删除索引并重新创建索引,您应该会好得多。