2014-04-14 105 views
1

我們使用Lucene搜索擴展2.1.3(從其build.properties文件)在Ubuntu 12.04.3上運行MediaWiki 1.21。使用Lucene搜索擴展功能MediaWiki 1.21找不到文檔

我跟着指示爲Single Host Setup(使用螞蟻打造的罐子),並設置搜索框建議。事情似乎工作得很好。但是,新的文檔沒有與預先輸入的搜索功能相匹配。望着文件系統,我看到有在應用程序的指數各項目錄:

$ cd /usr/local/search/lucene-search-2/indexes 
$ ls -l 
total 24 
drwxr-xr-x 10 root root 4096 Aug 20 2013 import 
drwxr-xr-x 7 root root 4096 Apr 14 06:42 index 
drwxr-xr-x 2 root root 4096 Apr 14 06:41 search 
drwxr-xr-x 9 root root 4096 Aug 20 2013 snapshot 
drwxr-xr-x 2 root root 4096 Aug 20 2013 status 
drwxr-xr-x 8 root root 4096 Aug 20 2013 update 

我們有一個運行了Lucene搜索構建命令,該命令轉儲維基數據庫作爲日常cron作業xml,然後修改導入快照文件夾中的文件。我注意到,這項工作從搜索文件夾,其中包含符號鏈接更新文件夾中寫道:

$ ls -l search/ 
total 24 
lrwxrwxrwx 1 root root 70 Feb 12 21:39 wikidb -> /usr/local/search/lucene-search-2/indexes/update/wikidb/20140212064727 
lrwxrwxrwx 1 root root 73 Feb 12 21:39 wikidb.hl -> /usr/local/search/lucene-search-2/indexes/update/wikidb.hl/20140212064727 
lrwxrwxrwx 1 root root 76 Apr 14 06:41 wikidb.links -> /usr/local/search/lucene-search-2/indexes/update/wikidb.links/20140414064150 
lrwxrwxrwx 1 root root 77 Feb 12 21:39 wikidb.prefix -> /usr/local/search/lucene-search-2/indexes/update/wikidb.prefix/20140212064728 
lrwxrwxrwx 1 root root 78 Feb 12 21:39 wikidb.related -> /usr/local/search/lucene-search-2/indexes/update/wikidb.related/20140212064713 
lrwxrwxrwx 1 root root 76 Feb 12 21:39 wikidb.spell -> /usr/local/search/lucene-search-2/indexes/update/wikidb.spell/20140212064740 

只有wikidb.links項電流。其他人幾個月大,這讓我想我錯過了我們日常cron任務的設置。這裏的工作:

#!/bin/sh 
log=/var/log/lucene-search-2-cron.log 
(
    echo "Building wiki lucene-search indexes ..." 
    cd /usr/local/search/lucene-search-2 
    ./build 

    echo "Stopping the lsearchd service..." 
    service lsearchd stop 

    # ok, so stopping the service apparently doesn't mean that the processes are gone, whack them manually 
    # See tip on using the "[x]yz" character class option so you don't need the additional "grep -v xyz": 
    # http://stackoverflow.com/questions/3510673/find-and-kill-a-process-in-one-line-using-bash-and-regex 
    echo "Killing any lucene-search processes that didn't terminate..." 
    kill -9 $(ps -ef | grep '[l]search' | awk '{print $2}') 

    echo "Starting the lsearchd service..." 
    service lsearchd start 

) > $log 2>&1 

而這裏的服務腳本/etc/init.d/lsearchd:

#!/bin/sh -e 
### BEGIN INIT INFO 
# Provides:    lsearchd 
# Required-Start:  $syslog 
# Required-Stop:  $syslog 
# Default-Start:  2 3 4 5 
# Default-Stop:   1 
# Short-Description: Start the Lucene Search daemon 
# Description:   Provide a Lucene Search backend for MediaWiki. Copied by John Ericson from: http://ubuntuforums.org/showthread.php?t 
=1476445 
### END INIT INFO 

# Set to install directory of lucense-search. For example: /usr/local/lucene-search-2.1.3 
LUCENE_SEARCH_DIR="/usr/local/search/lucene-search-2" 

# Set username for daemon to run as. Can also use syntax "username:groupname" to also specify group for daemon to run as. For example: me:me 
RUN_AS_USER="lsearchd" 

OPTIONS="-configfile $LUCENE_SEARCH_DIR/lsearch.conf" 

test -x $LUCENE_SEARCH_DIR/lsearchd || exit 0 

test -n "$RUN_AS_USER" && CHUID_ARG="--chuid $RUN_AS_USER" || CHUID_ARG="" 

if [ -f "/etc/default/lsearchd" ] ; then 
    . /etc/default/lsearchd 
fi 

. /lib/lsb/init-functions 

case "$1" in 
    start) 
    cd $LUCENE_SEARCH_DIR 
    log_begin_msg "Starting Lucene Search Daemon..." 
    start-stop-daemon --start --quiet --oknodo --chdir $LUCENE_SEARCH_DIR --background $CHUID_ARG --exec $LUCENE_SEARCH_DIR/lsearchd -- $OPT 
IONS 
    log_end_msg $? 
    ;; 
    stop) 
    log_begin_msg "Stopping Lucene Search Daemon..." 
    start-stop-daemon --stop --quiet --oknodo --retry 2 --chdir $LUCENE_SEARCH_DIR $CHUID_ARG --exec $LUCENE_SEARCH_DIR/lsearchd 
    log_end_msg $? 
    ;; 
    restart) 
    $0 stop 
    sleep 1 
    $0 start 
    ;; 
    reload|force-reload) 
    log_begin_msg "Reloading Lucene Search Daemon..." 
    start-stop-daemon --stop -signal 1 --chdir $LUCENE_SEARCH_DIR $CHUID_ARG --exec $LUCENE_SEARCH_DIR/lsearchd 
    log_end_msg $? 
    ;; 
    status) 
    status_of_proc $LUCENE_SEARCH_DIR/lsearchd lsearchd && exit 0 || exit $? 
    ;; 
    *) 
    log_success_msg "Usage: /etc/init.d/lsearchd {start|stop|restart|reload|force-reload|status}" 
    exit 1 
esac 

exit 0 

更新#1:

我刪除了更新目錄以root用戶身份從控制檯手動運行構建命令。正如預期的那樣,它只生成更新/ wikidb.links條目,其他文件夾都不存在。我回顧了我以前的設置筆記,並沒有看到任何不同,那麼這些文件夾是如何創建的,以及它們如何得到維護?

更新#2:

我折回我的步驟,從最初的安裝,而且看不到任何東西我錯過了。所以有機會,我停止了服務,並從控制檯運行lsearchd,並且它創建了丟失的目錄!所以我終止了這個過程並再次嘗試:刪除索引文件夾,並以root身份從控制檯運行cron腳本。我確認,當以這種方式運行時,lsearchd DID不會創建丟失的目錄。當然,現在我記得在初始設置時,我已經從控制檯運行lsearchd,驗證它是否正在獲取客戶端對維基搜索輸入字段的查詢。這些是它用於查找的索引,這解釋了爲什麼不包含新文檔。

下面是該命令會時作爲服務運行,如:

$ ps -ef | grep [l]search 
lsearchd 10192  1 0 14:02 ?  00:00:00 /bin/bash /usr/local/search/lucene-search-2/lsearchd -configfile /usr/local/search/lucene-search-2/lsearch.conf 
lsearchd 10198 10192 0 14:02 ?  00:00:01 java -Djava.rmi.server.codebase=file:///usr/local/search/lucene-search-2/LuceneSearch.jar -Djava.rmi.server.hostname=AMWikiBugz -jar /usr/local/search/lucene-search-2/LuceneSearch.jar -configfile /usr/local/search/lucene-search-2/lsearch.conf 

所以剩下的問題是:

爲什麼當作爲服務運行不lsearchd不能創建目錄?

回答

1

這是一個權限問題。 d'oh!

cron作業和服務init腳本執行所有以root身份,但是服務過程被實例化作爲lsearchd用戶。一旦我將/ usr/local/search/lucene-search-2/indexes /和所有子目錄的所有權改爲lsearchd:lsearchd,lsearchd進程可以在通過cron下的服務運行時創建丟失的目錄。

如果沿途有東西向syslog記錄了一條錯誤消息,說明它無法寫入目標文件夾,它會有所幫助。