代码之家  ›  专栏  ›  技术社区  ›  recursive9

强制solr从更新的索引中读取

  •  1
  • recursive9  · 技术社区  · 14 年前

    我有一个使用原始Lucene索引器构建和更新的Lucene索引。我想知道是否有一种方法可以强制solr在不重新启动solr实例的情况下重新读取索引。我试过更新了吗?承诺=真的,但似乎并不重要。唯一能确保solr-re读取索引的方法是完全重新启动,这在生产环境中当然不理想。

    2 回复  |  直到 10 年前
        1
  •  1
  •   Pascal Dimassimo    14 年前

    如果您使用的是多核设置,您可以 reload 单核。afaik,在重新加载核心时,对该核心的请求将排队。

        2
  •  0
  •   Xoroz    10 年前

    不确定是否还有其他更好的方法。 但我编写这个脚本是为了执行完全或增量导入。

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