2010-10-19 11 views
1

J'ai un index lucene que je construis et mets à jour en utilisant des indexeurs lucene bruts. Je me demandais s'il y avait un moyen de forcer solr à relire l'index sans redémarrer l'instance solr. J'ai essayé la mise à jour? Commit = true mais cela ne semble pas avoir d'importance. La seule façon dont je peux être sûr que l'index est lu par un redémarrage total, ce qui n'est bien sûr pas idéal dans un environnement de production.Force Solr à lire à partir d'un index mis à jour

Répondre

1

Si vous utilisez une configuration multicœur, vous pouvez simplement reload ce simple noyau. AFAIK, tandis que le noyau est en cours de rechargement, les demandes à ce noyau sont mises en file d'attente.

+0

et si je ne suis pas ?? – recursive9

+1

Je ne sais pas si vous pouvez envoyer un rechargement lorsque vous n'utilisez pas de cœurs. Mais il n'y a rien de mal à utiliser une configuration multi-core avec un seul noyau. Il n'ajoute pas de frais généraux significatifs. –

0

Vous ne savez pas s'il existe un autre moyen de le faire. Mais j'ai écrit ce script pour effectuer des importations complètes ou delta.

#!/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