nutch2.3.1 scoring-opic 插件url评分为0 问题

简介: 运行nutch程序,发现除了入口url等分为1以外,其余的url得分都为0,问题如下图红圈所示。 几番百度、谷歌、求助大神无果后,决定尝试跟踪源码找问题。源码环境搭建参考博客: http://blog.csdn.net/lqleo323/article/details/50999044首先在org.apache.nutch.scoring.opic.OPICScori

运行nutch程序,发现除了入口url等分为1以外,其余的url得分都为0,问题如下图红圈所示。
opicproblem1

几番百度、谷歌、求助大神无果后,决定尝试跟踪源码找问题。源码环境搭建参考博客:
http://blog.csdn.net/lqleo323/article/details/50999044

首先在org.apache.nutch.scoring.opic.OPICScoringFilter类里面打断点定位问题,每次运行到下面红圈处,程序就return了!。
opicproblem2

但是程序在一开始的inject阶段就把这个值注入了啊 注入代码:

@Override
    public void injectedScore(String url, WebPage row)
            throws ScoringFilterException {
        float score = row.getScore();
        row.getMetadata().put(CASH_KEY, ByteBuffer.wrap(Bytes.toBytes(score)));
    }

没有办法,只能每个阶段来调试,然后查看url里面的metadata属性,看他怎么消失的。inject,generate、fetch阶段的url图如下所示:
injectopic
generateopic
fetchopic
fetch阶段 metadata属性存储的cash值消失了!这下问题算是定位到了 在fetch阶段。接着就是跟踪fetch源码最后发现下面一段代码。

public Collection<WebPage.Field> getFields(Job job) {
    Collection<WebPage.Field> fields = new HashSet<WebPage.Field>(FIELDS);
    if (job.getConfiguration().getBoolean(PARSE_KEY, false)) {
      ParserJob parserJob = new ParserJob();
      fields.addAll(parserJob.getFields(job));
    }
    ProtocolFactory protocolFactory = new ProtocolFactory(
        job.getConfiguration());
    fields.addAll(protocolFactory.getFields());

    return fields;
  }

如果job.getConfiguration().getBoolean(PARSE_KEY, false)为真,即conf/nutch-site.xml配置

<property>
  <name>fetcher.parse</name>
  <value>true</value>
  <description>If true, fetcher will parse content. NOTE: previous releases would
  default to true. Since 2.0 this is set to false as a safer default.</description>
</property>

则url里面的metadata属性就有cash值,可以用于后面的计算url分数。
最后每个链接都有了分数
opicresult
修改了配置文件后。记得要ant clean,ant重新编译。
虽然问题好像看似解决了,但是还是有很多疑问,不明白为什么一个fetch阶段的配置可以影响到url的评分计算。而且这个fetcher.parse设置为true只是在fetch阶段也做parse的工作而已。希望有大神看到了可以帮我解惑。接触nutch几个月了,感觉坑很多,有时间还是要好好阅读下源码理一理才行。

联系作者

目录
相关文章
|
数据可视化 前端开发 IDE
Swagger URL 插件上线!同步文档更便捷!
Swagger 的用户有以下几个痛点: - 测试不方便,有简单的调用测试,但是没有历史也没有鉴权等功能; - 没有人员管理,无法协作/通知/版本管理; - 对于前端人员不友好,没有参数描述/值可能性,没有 Mock ; - 对代码有侵入性。
Swagger URL 插件上线!同步文档更便捷!
|
开发工具
【错误记录】Flutter 插件不兼容 ( requires Flutter SDK version >=1.22.0 <2.0.0, url_launcher >=5.7.7 <6.0.0- )
【错误记录】Flutter 插件不兼容 ( requires Flutter SDK version >=1.22.0 <2.0.0, url_launcher >=5.7.7 <6.0.0- )
267 0
【错误记录】Flutter 插件不兼容 ( requires Flutter SDK version >=1.22.0 <2.0.0, url_launcher >=5.7.7 <6.0.0- )
Flutter 插件url_launcher简介及使用,打开外部浏览器,拨打电话,发送短信,打开微信,支付宝,qq等
Flutter 插件url_launcher简介及使用,打开外部浏览器,拨打电话,发送短信,打开微信,支付宝,qq等
830 0
Flutter 插件url_launcher简介及使用,打开外部浏览器,拨打电话,发送短信,打开微信,支付宝,qq等
|
JavaScript
JQuery获得url参数插件
直接上代码。自己下载吧。 代码下载
612 0
|
11天前
|
JavaScript
vue截取URL中的参数
vue截取URL中的参数
12 0