批量删除旧且分散的主题

你好,

我们的论坛上有成千上万条过时或废弃的话题,我们希望能删除它们。我已经在 Meta 板块中搜索过合适的解决方案,但未能找到合适的方法。

如果遍历话题 ID 列表,并将我们想要“删除”的每个话题的 deleted_at 标志设置为已删除,这样是否足够?还是有更好的方法?我知道这有点偷懒。

我认为为了批量删除而专门编写一个(小型)插件来使用 Topic.destroy 方法,稍微有些多余。

此致
Sascha

附注:
背景:这些话题导致了爬虫问题和软性 404 错误,我们希望将它们从搜索引擎中隐藏。已删除的话题会被排除在我们的站点地图之外。

1 个赞

也许你只是不想让它们被列出?这样应该能防止它们被索引。

你是想一次性操作,还是定期操作?

1 个赞

您好,

是的,我们希望取消这些内容的公开列表,并阻止其被搜索引擎索引。
我们将一次性完成此操作,因为对于未来出现的任何产生爬虫问题的“故障”主题或帖子,我们可以手动进行调整。

我们的论坛非常古老(始于1996年),并经历过多次迁移,其中包含大量原始文本中的怪异或过时语法及其他问题。我们已收集了所有2015年之前发布、浏览量少于1000次,并在Google搜索控制台中显示为“故障”的主题。

对我们而言,将这些主题标记为已删除是可以接受的,但我们不太确定直接设置 deleted_at 字段是否合适,或者是否存在需要特别注意的依赖关系。因此,我们想知道是否应该采用程序化方式进行处理。

1 个赞

如果您想删除它们,那么我认为您确实应该调用 topic.delete。如果存在任何依赖关系,它会自动处理。

1 个赞

谢谢你的建议!如果我们决定彻底删除这些主题,我将通过 SQL 查询设置 deleted_atvisible=false。这些主题将在 30 天后由 Sidekiq 作业删除。
但如果需要保留这些主题,我会按照你的建议,使用 Ruby 代码片段调用 topic.delete 来“删除”它们。
因此,无论哪种情况,这些主题最终都会由 Discourse 自身处理,从而确保正确处理可能的依赖关系。

非常感谢!

1 个赞