2010-10-19 90 views
1

我有一個lucene索引,我使用原始lucene索引器進行構建和更新。我想知道是否有辦法強制solr在不重新啓動solr實例的情況下重新讀取索引。我試過更新?提交=真,但它似乎並不重要。唯一的辦法是我可以肯定solr重新讀取索引是通過重新啓動,這當然在生產環境中並不理想。強制Solr從更新索引讀取

回答

1

如果您使用的是多核設置,那麼您可以僅使用reload那個單核。 AFAIK,當核心被重新加載時,對該核心的請求排隊。

+0

如果我不是? – recursive9 2010-10-19 15:25:48

+1

我不知道在不使用核心的情況下是否可以發送重新加載。但是,只有一個核心的情況下使用多核設置沒有任何問題。它不會增加任何重要的開銷。 – 2010-10-19 15:35:46

0

不知道是否有另一種更好的方法來做到這一點。 但我寫了這個腳本來執行完整或增量導入。

#!/bin/bash 
# script to index Solr 
# by Felipe Ferreira Sept 2013 

TYPE=$1 
DATE=`date +%d_%m_%y` 
DATEFULL=`date +%H:%M:%S_%d_%m_%y` 
LOG="/var/log/solr/solr_import_${TYPE}_${DATE}.log" 
LOGTMP="/var/log/solr/solr_status_${DATE}.log" 

URL="http://<SERVER>:8080/solr/dataimport?command=status" 



pt() { 
echo -e $1 
echo -e $1 >> $LOG 
} 

if [ $TYPE == "full" ]; then 
    pt "$DATEFULL - Starting full import" 
    URL="http://<SERVER>:8080/solr/dataimport?command=full-import" 
# CMD="curl --location --no-buffer --fail --silent --output ${LOG} '${URL}'" 
    CMD="curl --location --silent --no-buffer '${URL}' >> $LOG" 
    pt "Executing $CMD" 
    CMD_E=`eval $CMD` 
    pt $CMD_E 
elif [ $TYPE == "delta" ]; then 
    pt "$DATEFULL - Starting delta import" 
    URL="http://<SERVER>:8080/solr/dataimport?command=delta-import" 
    #CMD="curl --location --no-buffer --fail --silent --output ${LOG} '${URL}'" 
    CMD="curl --location --silent --no-buffer '${URL}' >> $LOG" 
    pt "Executing $CMD" 
    CMD_E=`eval $CMD` 
    pt $CMD_E 
else 
    pt "ERROR - $TYPE not found, only delta or full,\n Usage: $0 delta/full" 
fi 

sleep 3 

#check status after command 
    pt "$DATEFULL - Checking $TYPE status" 
    URL="http://infofish2:9080/solrcadin/cadin/dataimport?command=status" 
    CMD="curl --location --silent --no-buffer '${URL}' > $LOGTMP" 
    pt "Executing $CMD" 
    CMD_E=`eval $CMD` 
    pt $CMD_E 
    CHECK=0 
    CHECK=`grep -c failed $LOGTMP` 
    if [ $CHECK -eq 0 ]; then 
     pt "OK - Command $TYPE executed with success!" 
     exit 0 
    else 

     pt "CRITICAL - Command $TYPE failed, solr did not index!" 
     pt "grep -c failed $LOGTMP" 
     pt "CHECK $CHECK" 
     exit 0 
    fi