【问题标题】:Indexing only specific domains with Solr and Nutch使用 Solr 和 Nutch 仅索引特定域
【发布时间】:2018-11-22 11:44:35
【问题描述】:

我想用 Nutch 抓取一个网站,并用 Solr 将它编入索引。

我有一个网站,其结构如下:

首页:example.com

我要索引的文档:subdomain.example.com/{some_number}.html

为了“发现”所有这些文档,我从example.com/discover 开始,其中列出了许多我想要的文档。

所以我现在拥有的是:

在我的regex-urlfilter.txt 中,我设置为仅从 example.com 抓取文档,这非常有效

我使用 Solr 进行索引,一切正常。我使用以下命令:

./$nutch/bin/crawl -i -s $nutch/urls/ $nutch/ 5

我现在想要的是只索引格式为:subdomain.example.com/{some_number}.html 的文档,忽略其他所有内容(即我不想索引 example.com/discover

我猜这是通过更改 Solr 中的一些配置来完成的,因为它是索引部分。

【问题讨论】:

    标签: solr web-crawler nutch


    【解决方案1】:

    在这种情况下,可以在 Nutch 端进行配置。在将文档发送到 Solr 之前对其进行过滤。

    如果您只想“索引”(意味着您想获取和解析所有链接,但只在 Solr 上存储与正则表达式匹配的链接),您可以使用 index-jexl-filter。使用这个插件,你可以写一个小的JEXL script 来检查文档的 URL 是否与你的正则表达式匹配,如果匹配,它将被发送到 Solr。

    脚本可能类似于(在您的nutch-site.xml 文件中配置):

    url =~ "^https?:\/\/[a-z]+\.example.com\/(\d+).html"
    

    如果通过“索引”您真的只需要抓取与您的正则表达式匹配的 URL(如果不匹配,则不会获取或解析),那么您可以使用相同的 regex-urlfilter.txt 来定义所需的格式。请记住,使用这种方法,您需要再次运行爬网。

    【讨论】:

    • 感谢您的回答!通过索引我的意思是存储在 Solr 中,所以 jexl 过滤器应该可以解决问题。我对 Nutch 和 Solr 完全陌生,所以我不太了解。在我的 Nutch 配置文件中,我添加了 index.jexl.filter 属性,在 value 中我应该像你说的那样输入 url,url=~ ....?我也尝试过再次爬网,但无论如何都会为不需要的文档编制索引。
    • 您还需要启用index-jexl-filter 插件。为此,您需要将其添加到plugin.includesvalue。例如,您可以将其添加到末尾。
    • 谢谢!现在它可以按我的意愿工作。同时,我还发现了另一种更糟糕的解决方案。我没有立即爬网和索引(-i 选项),而是只爬网,然后在索引之前(使用 -filter 选项),我用正则表达式更改了 regex-urlfilter.txt 以仅匹配我想要索引的文档。跨度>
    • 是的,应该也可以。很高兴你找到了另一个选择。通常情况下,处理连续运行爬虫,我直接跳到插件系统?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    相关资源
    最近更新 更多