1. 程式人生 > >nutch2.3.1 scoring-opic 外掛url評分為0 問題

nutch2.3.1 scoring-opic 外掛url評分為0 問題

執行nutch程式,發現除了入口url等分為1以外,其餘的url得分都為0,問題如下圖紅圈所示。
opicproblem1

首先在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幾個月了,感覺坑很多,有時間還是要好好閱讀下原始碼理一理才行。

聯絡作者