如何自定义 Apache Nutch 2.3 生成步骤
How to customize Apache Nutch 2.3 generate step
我希望 Nutch 根据我自己的规则 select 特定的 URL。此步骤在生成时完成。我知道如何编写 parser/indexer 插件。但是如何在生成时做到这一点。我的Nutch版本是2.3系列
Nutch 生成器并不是真正的 Nutch 扩展点,因此您无法编写插件来自定义它。尽管如此,没有什么能阻止您用自己的逻辑编写自己的生成器。
您需要调整 bin/nutch
和 bin/crawl
脚本才能调用您自己的生成器而不是默认生成器。请记住,Nutch 的其他一些部分依赖于生成器实现的某些部分(例如 SegmentMerger
)。如果您自定义这些部分,那么您还需要更新其他一些 类。
生成器在决定将哪些元素 return 时使用 ScoringFilter.generatorSortValue()
方法。因此,这是一种不需要更改生成器的替代方案。
旁注,这并非完全不常见,我似乎有些客户需要定制生成器。
正如 Jorge 所建议的,您可以编写一个评分过滤器,根据您自己的逻辑为页面分配分数,并在生成步骤中基于此进行过滤。或者,如果偶然可以仅根据 URL 确定您的选择规则,您可以使用一个定制的 URL 规范化程序,该规范化程序与生成范围(或任何值)一起使用,这将重写 URLs 变成 URL 过滤器随后会丢弃的东西。作为生成步骤的一部分,您需要激活过滤。这是一个丑陋的 hack。
Nutch 2.x 真的很笨拙,我不确定您是否可以根据原始过滤器创建 table 的副本。
你使用什么 Gora 后端?
StormCrawler 对此更加灵活,我们最近添加了 a mechanism for filtering URLs at the spout level,这正是您所需要的。您可以在 Nutch 2.x 中做类似的事情,但这可能意味着在 GORA 中也要进行更改。
我希望 Nutch 根据我自己的规则 select 特定的 URL。此步骤在生成时完成。我知道如何编写 parser/indexer 插件。但是如何在生成时做到这一点。我的Nutch版本是2.3系列
Nutch 生成器并不是真正的 Nutch 扩展点,因此您无法编写插件来自定义它。尽管如此,没有什么能阻止您用自己的逻辑编写自己的生成器。
您需要调整 bin/nutch
和 bin/crawl
脚本才能调用您自己的生成器而不是默认生成器。请记住,Nutch 的其他一些部分依赖于生成器实现的某些部分(例如 SegmentMerger
)。如果您自定义这些部分,那么您还需要更新其他一些 类。
生成器在决定将哪些元素 return 时使用 ScoringFilter.generatorSortValue()
方法。因此,这是一种不需要更改生成器的替代方案。
旁注,这并非完全不常见,我似乎有些客户需要定制生成器。
正如 Jorge 所建议的,您可以编写一个评分过滤器,根据您自己的逻辑为页面分配分数,并在生成步骤中基于此进行过滤。或者,如果偶然可以仅根据 URL 确定您的选择规则,您可以使用一个定制的 URL 规范化程序,该规范化程序与生成范围(或任何值)一起使用,这将重写 URLs 变成 URL 过滤器随后会丢弃的东西。作为生成步骤的一部分,您需要激活过滤。这是一个丑陋的 hack。
Nutch 2.x 真的很笨拙,我不确定您是否可以根据原始过滤器创建 table 的副本。
你使用什么 Gora 后端?
StormCrawler 对此更加灵活,我们最近添加了 a mechanism for filtering URLs at the spout level,这正是您所需要的。您可以在 Nutch 2.x 中做类似的事情,但这可能意味着在 GORA 中也要进行更改。