Domanda

ha installato Nutch con un db.fetch.interval.default di 60000 in modo da poter eseguire la scansione ogni giorno. Se non lo faccio, non sarà nemmeno guardare il mio sito quando striscio il giorno successivo. Ma quando faccio strisciare il giorno dopo, ogni pagina che avrebbe recuperato ieri viene recuperato con un codice di risposta 200, che indica che non è con la data del giorno precedente, in "If-Modified-Since". Non dovrebbe saltare le pagine che vanno a prendere che non sono cambiati? C'è un modo per fargli fare che? Ho notato un ProtocolStatus.NOT_MODIFIED in Fetcher.java, quindi penso che dovrebbe essere in grado di fare questo, non dovrebbe?

A proposito, questo è tagliato e incollato da conf / nutch-default.xml dal tronco corrente:

<!-- web db properties -->

<property>
  <name>db.default.fetch.interval</name>
  <value>30</value>
  <description>(DEPRECATED) The default number of days between re-fetches of a page.
  </description>
</property>

<property>
  <name>db.fetch.interval.default</name>
  <value>2592000</value>
  <description>The default number of seconds between re-fetches of a page (30 days).
  </description>
</property>
È stato utile?

Soluzione

Ho trovato il problema. Si tratta di un bug in Nutch. Ho inviato via email la lista degli sviluppatori Nutch su di esso, ma qui è il mio fix:

Index: src/plugin/protocol-http/src/java/org/apache/nutch/protocol/http/HttpResponse.java
===================================================================
--- src/plugin/protocol-http/src/java/org/apache/nutch/protocol/http/HttpResponse.java  (revision 802632)
+++ src/plugin/protocol-http/src/java/org/apache/nutch/protocol/http/HttpResponse.java  (working copy)
@@ -124,11 +124,15 @@
         reqStr.append("\r\n");
       }

-      reqStr.append("\r\n");
       if (datum.getModifiedTime() > 0) {
         reqStr.append("If-Modified-Since: " + HttpDateFormat.toString(datum.getModifiedTime()));
         reqStr.append("\r\n");
       }
+      else if (datum.getFetchTime() > 0) {
+          reqStr.append("If-Modified-Since: " + HttpDateFormat.toString(datum.getFetchTime()));
+          reqStr.append("\r\n");
+      }
+      reqStr.append("\r\n");     

       byte[] reqBytes= reqStr.toString().getBytes();

Ora sto vedendo 304S nei miei log di Apache dove dovrei essere vederli.

Altri suggerimenti

Credo che vi sbagliate, con un nome di opzione - db.fetch.interval.default. Dovrebbe essere.

db.default.fetch.interval

Il numero di giorni dopo ogni pagina iniettato è inverosimile che deve poi essere recuperati. 30 per impostazione predefinita.

Ho appena letto il cambiamento di registro della versione più recente, e ha trovato in seguito

  
      
  1. Nutch-61 - Supporto per adattiva ri-fetch intervallo e la rilevazione di   contenuto non modificato. (Ab)
  2.   

Se non avete installato la versione più recente, vi consiglio di farlo.

Inoltre, stai usando l'opzione -adddays per la scansione?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top