elasticsearch 使用metadata.transfer和N:M关系抓取小型主页,elasticsearch,web-crawler,stormcrawler,elasticsearch,Web Crawler,Stormcrawler" /> elasticsearch 使用metadata.transfer和N:M关系抓取小型主页,elasticsearch,web-crawler,stormcrawler,elasticsearch,Web Crawler,Stormcrawler" />

elasticsearch 使用metadata.transfer和N:M关系抓取小型主页

elasticsearch 使用metadata.transfer和N:M关系抓取小型主页,elasticsearch,web-crawler,stormcrawler,elasticsearch,Web Crawler,Stormcrawler,大家好 我们使用StormCrawler和elasticsearch为我们的主页建立索引,其中包括“旧页面”和“新页面”。 简言之,我的问题是: 如果两个页面A(旧)和B(新)链接到页面X,如何将元数据从B传递到X 我的问题是: 我们一步一步地重新打开了我们的主页。所以当时我们有pdf文件,可以通过旧的html页面、新的html页面或两种方式访问 出于“订购依据”的目的,我们必须标记新html页面可访问的所有pdf文件。 因此,我们在seeds.txt中插入“newHomepage=true”,

大家好

我们使用StormCrawler和elasticsearch为我们的主页建立索引,其中包括“旧页面”和“新页面”。 简言之,我的问题是: 如果两个页面A(旧)和B(新)链接到页面X,如何将元数据从B传递到X

我的问题是: 我们一步一步地重新打开了我们的主页。所以当时我们有pdf文件,可以通过旧的html页面、新的html页面或两种方式访问

出于“订购依据”的目的,我们必须标记新html页面可访问的所有pdf文件。 因此,我们在seeds.txt中插入“newHomepage=true”,在“crawler-conf.yaml”中插入“metadata.transfer/-newHomepage”:Fine:-)

但对于pdf文件,可以从旧版本访问!还有!新的html页面,我们现在有一个竞争条件:如果我们的pdf文件是从一个旧页面“发现”的,这个信息(newHomepage=false)在状态索引中,不能被覆盖。 (默认情况下,StatusUpdaterBolt不覆盖文档,IndexerBolt覆盖文档)

让想法更复杂:在我们的例子中,一个指向PDF的URL(在html页面上)在文件交付之前被重定向两次

因此,在我看来,我们有两种可能性:

  • 启动爬虫两次。首先,我们只索引我们的新页面(以及所有可访问的pdf文件),其次,我们索引我们的旧页面。
    • -->爬虫程序启动后更改的新页面出现问题
  • 存储“出站链接”,并使用它们独立于爬虫设置“新主页”
    • -->索引中存在错误元数据的短时间
  • 有什么建议或其他想法吗

    致意
    Karsten

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

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

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


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

    好的,我喜欢这个解决方案。但是如何确保“newHomepage=true”状态与当前处理的“newHomepage=false”状态相比获胜?-->是否支持状态索引中的版本号?(乐观锁定)状态索引中没有版本号的问题示例:让url_X被发现为“newHomepage=false”。现在ElasticSearchSpoot已经读取了url_X,但是在获取url_X文档的时候,url_X又被发现了。这一次使用“newHomepage=true”。因此,StatusUpdaterBolt将首先写入带有“newHomepage=true”和状态“discovered”的url_X,但在此之后,StatusUpdaterBolt将直接写入带有状态“fetched”和“newHomepage=false”的url_X,以便在Elasticsearch中进行乐观锁定:您不能使用两个不同的键,例如FoundInLod和foundInNew吗?您可以查询具有这两个或其中一个标记的文档?解决方案是删除状态“已发现”(如您建议的)的“创建”属性,但也使用ElasticSearch的“外部版本”功能。对于“新主页”的链接,我们使用更高的版本号,因此属于“旧主页”的状态文档将被覆盖。