大家好,
我们使用带有elasticsearch的StormCrawler来制作我们主页的索引,该索引包含"旧页面"和"新页面"。 我的问题简而言之: 如果两个页面A(旧),B(新)链接到页面X,如何将元数据从B传递到X?
我的问题: 我们一步一步地重新启动了我们的主页。因此,我们有时可以通过旧的html页面,只通过新的html页面或两种方式访问pdf文件。
对于"按顺序排列"目的我们必须标记新的html页面可以访问的所有pdf文件。 所以我们插入" newHomepage = true"到seeds.txt和" metadata.transfer / -newHomepage" to" crawler-conf.yaml":很好: - )
但是对于可以从旧版本访问的pdf文件!新的html页面,我们现在有一个竞争条件:如果我们的pdf文件是" DISCOVERED"从旧页面,此信息(newHomepage = false)位于状态索引中,无法覆盖。 (StatusUpdaterBolt不会覆盖文档,IndexerBolt默认会覆盖)。
使思考更加复杂:在我们的例子中,在文件传递之前,PDF的URL(在html页面上)被重定向两次。
因此,从我的观点来看,我们有两种可能性:
有任何建议或其他想法吗?
祝你好运 卡斯滕
答案 0 :(得分:1)
感谢您分享您的问题,并且非常高兴听到您正在使用SC。这是一个有趣且不寻常的用例。
您对问题的分析是正确的。一种直观的方法是扩展默认的StatusUpdaterBolt,以便在文档已经存在时更新元数据。您需要删除检查文档是否具有DISCOVERED状态的部分。
这会降低速度,但由于您正在处理单个网站,因此不应产生重大影响。
如果文档已经被提取,那么你可以通过设置一个新的nextFetchDate进一步推动逻辑,以便在doc索引中更快地重新获取和更新(而不是状态一)。