嗨伙计,
我们使用 StormCrawler 和 elasticsearch 来为我们的主页创建一个索引,它由“旧页面”和“新页面”组成。简而言之我的问题:如果两个页面 A(旧),B(新)链接到页面 X,如何将元数据从 B 传递到 X?
我的问题很长:我们逐步重新启动了我们的主页。所以有时我们有 pdf 文件,这些文件只能通过旧的 html 页面、只能通过新的 html 页面或两种方式访问。
出于“排序依据”的目的,我们必须标记新 html 页面可访问的所有 pdf 文件。所以我们将“newHomepage=true”插入到seeds.txt,将“metadata.transfer/-newHomepage”插入到“crawler-conf.yaml”:很好:-)
但是对于从旧的 !and! 可以访问的 pdf 文件!新的 html 页面,我们现在有一个竞争条件:如果我们的 pdf 文件是从旧页面“发现”的,则此信息 (newHomepage=false) 位于状态索引中并且不能被覆盖。(StatusUpdaterBolt 不会覆盖文档,IndexerBolt 默认会覆盖)。
为了使想法更复杂:在我们的例子中,一个指向 PDF 的 URL(在 html 页面上)在文件交付之前被重定向了两次。
所以从我的角度来看,我们有两种可能性:
- 启动爬虫两次。首先,我们只索引我们的新页面(以及所有可访问的 pdf 文件),其次我们索引我们的旧页面。
- --> 爬虫启动后新页面发生变化的问题
- 存储“outbound_links”并使用它们独立于爬虫设置“newHomepage”
- --> 索引中元数据错误的时间很短
有什么建议或其他想法吗?
最好的问候卡斯滕