У меня есть вопрос о повторном сканировании с Nutch 1.15 (или 1.14 тоже)
Я прочитал статью Паскаля Димассимо и настроил свойство AdaptiveFetchSchedule
Я протестировал скрипт повторного сканирования в вики без особых результатов.
Действительно после дампа базы данных crawldb я вижу Retry interval
со значением, определенным с db.fetch.interval.default
У меня есть несколько вопросов:
Почему в примере повторного сканирования сценария шаг разбора не выполняется?
Почему, когда я запускаю второй обход с помощью bin/crawl
или recrawl.sh, все URL повторно анализируются, несмотря на retryinterval = 1day
Не могли бы вы подробно описать шаги, которые необходимо выполнить для автоматизации сканирования и индексации с нуля на solr.
Сканирование довольно длительное, и я полагаю, что при эффективном повторном сканировании оно может быть быстрым и анализировать только обновленные URL-адреса
спасибо
Nutch-сайт
<property>
<name>db.fetch.interval.default</name>
<value>86400</value>
<description>The default number of seconds between re-fetches of a page (30 days).
</description>
</property>
<property>
<name>db.fetch.schedule.class</name>
<value>org.apache.nutch.crawl.AdaptiveFetchSchedule</value>
<description>The implementation of fetch schedule. DefaultFetchSchedule simply adds the original fetchInterval to the last fetch time, regardless of page changes, whereas AdaptiveFetchSchedule (see below) tries to adapt to the rate at which a given page is changed.</description>
</property>
Recrawl.sh
depth=2
threads=50
adddays=1
#topN=50 #Comment this statement if you don't want to set topN value
# Arguments for rm and mv
RMARGS="-rf"
MVARGS="--verbose"
# Parse arguments
if [ "$1" == "safe" ]
then
safe=yes
fi
if [ -z "$NUTCH_HOME" ]
then
NUTCH_HOME=.
echo runbot: $0 could not find environment variable NUTCH_HOME
echo runbot: NUTCH_HOME=$NUTCH_HOME has been set by the script
else
echo runbot: $0 found environment variable NUTCH_HOME=$NUTCH_HOME
fi
if [ -n "$topN" ]
then
topN="-topN $topN"
else
topN=""
fi
steps=8
echo "----- Inject (Step 1 of $steps) -----"
$NUTCH_HOME/bin/nutch inject crawl/crawldb urls
echo "----- Generate, Fetch, Parse, Update (Step 2 of $steps) -----"
for((i=0; i < $depth; i++))
do
echo "--- Beginning crawl at depth `expr $i + 1` of $depth ---"
$NUTCH_HOME/bin/nutch generate crawl/crawldb crawl/segments $topN \
-adddays $adddays
if [ $? -ne 0 ]
then
echo "runbot: Stopping at depth $depth. No more URLs to fetch."
break
fi
segment=`ls -d crawl/segments/* | tail -1`
$NUTCH_HOME/bin/nutch fetch $segment -threads $threads
if [ $? -ne 0 ]
then
echo "runbot: fetch $segment at depth `expr $i + 1` failed."
echo "runbot: Deleting segment $segment."
rm $RMARGS $segment
continue
fi
$NUTCH_HOME/bin/nutch parse $segment
$NUTCH_HOME/bin/nutch updatedb crawl/crawldb $segment
done
echo "----- Merge Segments (Step 3 of $steps) -----"
$NUTCH_HOME/bin/nutch mergesegs crawl/MERGEDsegments -dir crawl/segments/ -filter -normalize
if [ "$safe" != "yes" ]
then
rm $RMARGS crawl/segments
else
rm $RMARGS crawl/BACKUPsegments
mv $MVARGS crawl/segments crawl/BACKUPsegments
fi
mv $MVARGS crawl/MERGEDsegments crawl/segments
echo "----- Invert Links (Step 4 of $steps) -----"
$NUTCH_HOME/bin/nutch invertlinks crawl/linkdb -dir crawl/segments/
echo "----- Index (Step 5 of $steps) -----"
$NUTCH_HOME/bin/nutch index crawl/crawldb -linkdb crawl/linkdb crawl/segments/* -filter -normalize -deleteGone
echo "----- Dedup (Step 6 of $steps) -----"
$NUTCH_HOME/bin/nutch dedup crawl/crawldb
echo "----- Merge Indexes (Step 7 of $steps) -----"
#$NUTCH_HOME/bin/nutch merge crawl/NEWindex crawl/NEWindexes
echo "----- Loading New Index (Step 8 of $steps) -----"
service solr stop
if [ "$safe" != "yes" ]
then
rm $RMARGS crawl/NEWindexes
rm $RMARGS crawl/index
else
rm $RMARGS crawl/BACKUPindexes
rm $RMARGS crawl/BACKUPindex
mv $MVARGS crawl/NEWindexes crawl/BACKUPindexes
mv $MVARGS crawl/index crawl/BACKUPindex
fi
#mv $MVARGS crawl/NEWindex crawl/index
service solr start
echo "runbot: FINISHED: Crawl completed!"
РЕДАКТИРОВАТЬ:
Я добавляю некоторые разъяснения
Я пытаюсь только с одной страницы. Я запускаю первое сканирование с адаптивными параметрами и интервалом = 30 минут (сканирование страницы занимает несколько секунд)
После 2 или 3 ползаний я вижу
Generator: 0 records selected for fetching, exiting...
runbot: Stopping at depth 1. No more URLs to fetch.
Я полагаю, это из-за адаптивных настроек, потому что на странице не было сделано никаких изменений, это правда?
Затем я изменяю страницу, затем снова выполняю сканирование. Но здесь у меня то же сообщение, что и раньше, и страница не анализируется повторно.
Если я выполняю readdb, информация хорошая, но последнее измененное значение всегда равно 0. Почему?
Status: 6 (db_notmodified)
Fetch time: Tue Sep 18 16:20:41 CEST 2018
Modified time: Tue Sep 18 15:59:05 CEST 2018
Retries since fetch: 0
Retry interval: 840 seconds (0 days)
Score: 4.0
Signature: 17a6530070b6d13a6da7b15193c038fb
Metadata:
_pst_=success(1), lastModified=0
_rs_=46
Content-Type=application/xhtml+xml
nutch.protocol.code=200