我想使用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中的某些配置来完成的,因为它是索引的一部分。
答案 0 :(得分:2)
在这种情况下,可以在Nutch侧进行配置。在将文档发送到Solr之前对其进行过滤。
如果只想“索引”(意味着要提取和解析所有链接,但仅将与正则表达式匹配的链接存储在Solr上),则可以使用index-jexl-filter。使用此插件,您可以编写一个小的JEXL script来检查文档的URL是否与您的正则表达式匹配,如果匹配则将其发送给Solr。
该脚本可能类似于(在nutch-site.xml
文件上配置):
url =~ "^https?:\/\/[a-z]+\.example.com\/(\d+).html"
url
是JEXL上下文中可用的默认原语。您可以在https://github.com/apache/nutch/blob/master/conf/nutch-default.xml#L1755-L1771 如果通过“索引”来表示您只想抓取与正则表达式匹配的URL(如果不匹配,则不会提取也不分析),则可以使用相同的regex-urlfilter.txt
来定义所需的URL格式。请记住,使用这种方法,您将需要再次运行爬网。