【发布时间】:2019-12-10 19:40:17
【问题描述】:
我正在建立一个基于 Stormcrawler (v1.13) 和 Elasticsearch 的网络搜索。我已将 Stormcrawler 配置为每 24 小时重新抓取索引页面。此外,该网站有一个 RSS 提要,其中包含最近发布或更新的页面,每 10 分钟抓取一次。这适用于检测新页面。不过,我也想在短时间内重新抓取已更改的页面(例如,当标题更改时)。
解析 RSS 提要时,发现的 URL 将发送到调度程序,状态为 DISCOVERED 和来自 RSS 提要的一些额外元数据(即feed.publishedDate)。
我最初的想法是在文档被标记为FETCHED 时(使用自定义索引器螺栓)将元数据indexedDate 添加到status 索引中。这将是页面最后一次被索引的时间戳。然后我将实现一个自定义调度程序,它检查feed.publishedDate(来自RSS 提要中的DISCOVERED 条目)是否比已经存储在status 索引中的相应条目的indexedDate 更新。如果是这样,它将下一个获取日期设置为当前时间,以便尽快重新获取。
问题是我找不到访问索引页面和发现的 RSS 条目的好方法,所以我可以比较日期。有没有其他推荐的方法可以实现我想要的?
这是我的crawler.flux-file 中的一些代码:
...
bolts:
...
- id: "feed"
className: "com.digitalpebble.stormcrawler.bolt.FeedParserBolt"
parallelism: 1
...
streams:
- from: "spout"
to: "partitioner"
grouping:
type: SHUFFLE
- from: "spout"
to: "status_metrics"
grouping:
type: SHUFFLE
- from: "partitioner"
to: "fetcher"
grouping:
type: FIELDS
args: ["key"]
- from: "fetcher"
to: "sitemap"
grouping:
type: LOCAL_OR_SHUFFLE
- from: "sitemap"
to: "feed"
grouping:
type: LOCAL_OR_SHUFFLE
- from: "feed"
to: "parse"
grouping:
type: LOCAL_OR_SHUFFLE
- from: "parse"
to: "index"
grouping:
type: LOCAL_OR_SHUFFLE
...
【问题讨论】: