1. 程式人生 > >Coreseek安裝-帶中文分詞的Sphinx

Coreseek安裝-帶中文分詞的Sphinx

什麼是Coreseek

Sphinx預設不支援中文索引及檢索,基於Sphinx開發了Coreseek全文檢索伺服器,Coreseek應該是現在用的最多的Sphinx中文全文檢索,它提供了為Sphinx設計的中文分詞包LibMMSeg包含mmseg中文分詞。

安裝 1.先安裝環境

yum install make gcc gcc++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel expat-devel

注: 檢測以上軟體是否安裝,如果沒有請確保安裝;否則無法正常安裝Coreseek-3.2.14 2、開始安裝:

cd /usr/local/src     #把安裝包放到此處

wget http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.14.tar.gz        #下載CoreSeek,這裡注意一下,這個路徑現在暫時已經用不了(至少我寫這篇部落格的時候用不了),但是畢竟這是官網,還是要放一下的。我的網盤中有該軟體 http://url.cn/2I77CON ,大家可以先下載到本地,然後再用 Filezilla 等軟體上傳到伺服器即可。

tar -zxvf coreseek-3.2.14.tar.gz

cd coreseek-3.2.14  #解壓出來的資料夾

##############安裝 mmseg #################

cd mmseg-3.2.14

./bootstrap        #輸出的warning資訊可以忽略,如果出現error則需要解決,一般不會出現錯誤

./configure --prefix=/usr/local/mmseg3  #指定 mmseg 的安裝目錄

make && make install


#############安裝 csft-3.2.14 ###############

cd /usr/local/src/csft-3.2.14

#這裡我們要修改 src/sphinxexpr.cpp 檔案,將該檔案中的 1013、1047、1080 行的 ExprEval 改為 this->ExprEval(這裡的行數跟網上的教程說的行數不一樣,可能是版本的問題吧,但是如果你用的是我提供的版本,該行數是正確的),懂點 C++ 的同學也可以自己看看 ExprEval 錯在哪裡。

#改完上面所說的問題後:
sh buildconf.sh

./configure --prefix=/usr/local/coreseek  --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql

make && make install



cd csft-4.1

可能報錯: automake: warnings are treated as errors

此時,修改configure.ac vim configure.ac 13行 >>> AM_INIT_AUTOMAKE([-Wall -Werror foreign]) 改為 AM_INIT_AUTOMAKE([-Wall foreign]) subdir-objects 儲存退出 libsphinx.a(sphinx.o): In function CSphTokenizer_zh_CN_GBK::GetLocalBuffer(unsigned char*, int, unsigned char*)': /setup/coreseek-3.2.14/csft-3.2.14/src/sphinx.cpp:4764: undefined reference to

libiconv’ libsphinx.a(sphinx.o): In function CSphTokenizer_zh_CN_UTF8_Private::GetConverterOutput(char const*, char const*)': /setup/coreseek-3.2.14/csft-3.2.14/src/tokenizer_zhcn.h:86: undefined reference tolibiconv_open’ /setup/coreseek-3.2.14/csft-3.2.14/src/tokenizer_zhcn.h:89: undefined reference to libiconv' libsphinx.a(sphinx.o): In functionCSphTokenizer_zh_CN_GBK::SetBuffer(unsigned char*, int)’: /setup/coreseek-3.2.14/csft-3.2.14/src/sphinx.cpp:4792: undefined reference to libiconv' libsphinx.a(sphinx.o): In functionCSphTokenizer_zh_CN_UTF8_Private::GetConverter(char const*, char const*)’: /setup/coreseek-3.2.14/csft-3.2.14/src/tokenizer_zhcn.h:70: undefined reference to libiconv_open' /setup/coreseek-3.2.14/csft-3.2.14/src/tokenizer_zhcn.h:73: undefined reference tolibiconv’ libsphinx.a(sphinx.o): In function xmlUnknownEncoding': /setup/coreseek-3.2.14/csft-3.2.14/src/sphinx.cpp:20719: undefined reference tolibiconv_open’ /setup/coreseek-3.2.14/csft-3.2.14/src/sphinx.cpp:20737: undefined reference to libiconv' /setup/coreseek-3.2.14/csft-3.2.14/src/sphinx.cpp:20743: undefined reference tolibiconv_close’ collect2: ld 返回 1 make[2]: *** [indexer] 錯誤 1 make[2]: Leaving directory /setup/coreseek-3.2.14/csft-3.2.14/src' make[1]: *** [all] 錯誤 2 make[1]: Leaving directory/setup/coreseek-3.2.14/csft-3.2.14/src’ make: *** [all-recursive] 錯誤 1

解決 一開始以為libiconv的問題,又重灌了幾次還是一樣,最後終於找著辦法了 編輯: ./src/MakeFile檔案 將 LIBS = -lm -lexpat -L/usr/local/lib 改成 LIBS = -lm -lexpat -liconv -L/usr/local/lib