【问题标题】:crawl small homepage with metadata.transfer and N:M-relationships使用 metadata.transfer 和 N:M-relationships 抓取小型主页
【发布时间】:2017-05-22 21:22:23
【问题描述】:

大家好,

我们使用 StormCrawler 和 elasticsearch 来为我们的主页创建一个索引,它由“旧页面”和“新页面”组成。 简而言之,我的问题: 如果两个页面 A(old),B(new) 链接到页面 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 页面上)在文件交付之前被重定向了两次。

所以在我看来,我们有两种可能性:

  1. 启动爬虫两次。首先,我们只索引我们的新页面(以及所有可访问的 pdf 文件),其次我们索引我们的旧页面。
    • --> 爬虫启动后新页面发生变化的问题
  2. 存储“outbound_links”并使用它们独立于爬虫设置“newHomepage”
    • --> 索引中元数据错误的时间很短

有什么建议或其他想法吗?

最好的问候 卡斯滕

【问题讨论】:

    标签: elasticsearch web-crawler stormcrawler


    【解决方案1】:

    感谢您分享您的问题,很高兴听到您正在使用 SC。这是一个有趣且不寻常的用例。

    您对问题的分析是正确的。一种直观的方法是扩展默认的 StatusUpdaterBolt,以便在文档已经存在时更新元数据。您需要删除检查文档是否具有 DISCOVERED 状态的部分。

    这会减慢速度,但由于您处理的是单个网站,因此不会产生巨大影响。

    如果文档已被提取,您可以通过设置新的 nextFetchDate 来进一步推动逻辑,以便在文档索引中更快地重新提取和更新它(与状态索引相反)。

    【讨论】:

    • 好的,我喜欢这个解决方案。但是如何确保“newHomepage=true”-Status 确实战胜了当前处理的“newHomepage=false”-Status? --> 支持状态索引中的版本号? (乐观锁定,elastic.co/guide/en/elasticsearch/reference/current/…
    • status-index 中没有版本号的问题示例:使用“newHomepage=false”发现 url_X。现在,ElasticSearchSpout 已经读取了 url_X,但正是在此时获取 url_X 的文档时,再次发现了 url_X。这次是“newHomepage=true”。因此,StatusUpdaterBolt 将首先将 url_X 写入“newHomepage=true”和“discovered”状态,但在此之后,StatusUpdaterBolt 将直接写入 url_X,状态为“fetched”和“newHomepage=false”
    • Elasticsearch 中乐观锁定的正确链接:elastic.co/guide/en/elasticsearch/guide/current/…
    • 你不能使用 2 个不同的键,例如foundInOld 和 foundInNew?您可以查询具有这两个或其中一个标签的文档吗?
    • 解决方案是删除状态“DISCOVERED”的“create”属性(就像您推荐的那样),但也使用 ElasticSearch 的“外部版本”功能。对于指向“newHomepage”的链接,我们使用更高的版本号,因此属于“oldHomepage”的状态文档将被覆盖。
    猜你喜欢
    • 2020-03-23
    • 1970-01-01
    • 2011-07-16
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 2015-04-15
    • 2018-07-24
    相关资源
    最近更新 更多