特別注意:如果用的是coreseek 則不用安裝php的sphinx擴展,coreseek都有封裝好的。所以不要走彎路哦。
一定要看官方的文檔,安裝Coreseek是有許多依賴包的,如果這些包沒裝,會出現各種問題。確保都存在這些包的境況下,在安裝coreseek。
以下是官網的yum安裝所需要的包
yum install
make gcc g++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel expat-devel
本地用的是nginx+php+linux環境
Coreseek用的Coreseek-4.1
一、Coreseek安裝
1、下載Coreseek-4.1的源代碼
wget http://www.coreseek.cn/uploads/csft/4.0/coreseek-4.1-beta.tar.gz tar xvf coreseek-4.1-beta.tar.gz cd coreseek-4.1-beta
解壓後發現有三個目錄,主要的目錄結構如下
coreseek-4.1-beta/ csft-4.1/
coreseek修改sphinx-2.0.1後的代碼 api/ sphinx searchd[查詢API][6]的實現
mmseg-3.2.14/ libmmseg分詞庫
testpack/ 測試和配置示例 README.txt 介紹和安裝指南
2、安裝mmseg-3.2.14 (出現警告可以不用處理)
cd mmseg-3.2.14 ./bootstrap ./configure --prefix=/usr/local/mmseg3 make && sudo make install
至此coreseek的中文分詞包就安裝成功了 usr/local/ 會出現mmseg3 以上步驟參考官網即可http://www.coreseek.cn/products-install/install_on_bsd_linux/
二、安裝libiconv-1.14
先安裝libiconv,用於字符集編碼的轉換。不裝這個 安裝csft-4.1時會報錯
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz tar xvf libiconv-1.14.tar.gz cd libiconv-1.14 ./configure make && sudo make install && ldconfig (如果沒有出現以下錯誤請略過)
如果你的glibc版本在2.16以上,make時很有可能出現如下錯誤
In file included from progname.c:26:0: ./stdio.h:1010:1: error: ‘gets’ undeclared here (not in a function) _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); ^解決辦法如下:
1、在libiconv-1.14目錄下執行 (我用的是這種方法)
wget -O - http://blog.atime.me/static/resource/libiconv-glibc-2.16.patch.gz | gzip -d - | patch -p0
2、或者考慮直接註釋掉srclib/stdio.in.h文件的第698行(應該沒問題),即
// _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
make && sudo make install && ldconfig 即可
三、安裝csft-4.1
如果sh buildconf.sh
最後沒有生成configure腳本,且提示automake:
warnings are treated as errors
,可以將configure.ac中的這行
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
改爲
AM_INIT_AUTOMAKE([-Wall foreign])
即刪掉-Werror
,然後重新運行sh
buildconf.sh
。
如果configure的時候提示沒有安裝MySQL的頭文件,從新安裝一遍mysql即可。(http://jingyan.baidu.com/article/c74d600079be530f6a595dc3.html)安裝mysql連接
如果你的gcc版本在4.7以上,編譯的時候可能會因爲sphinx的一個bug報錯
sphinxexpr.cpp:1746:43: error: ‘ExprEval’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
解決方法參考bug報告裏的一個patch,在csft-4.1目錄下執行
wget -O - http://blog.atime.me/static/resource/sphinxexpr-gcc4.7.patch.gz | gzip -d - | patch -p0
或者你也可以直接修改src/sphixexpr.cpp文件的1746, 1777和1823行,將三行中的ExprEval
改爲this->ExprEval
。
## 如果出現undefined reference to `libiconv'的類似錯誤,可以按照如下方法處理:
##方法一:(Linux使用)
## 直接執行:export LIBS="-liconv"
##然後make clean,再次configure後,進行編譯安裝make && make install
## 方法二:
## 首先configure,然後vim src/makefile
## 在其中搜索lexpat,在其後加上 -liconv
## 修改後該行應該爲:-lexpat -liconv -L/usr/local/lib
## 然後再次make && make install
## 方法三:
## 首先configure,然後vim config/config.h
## 在其中搜索USE_LIBICONV,將其後的1修改爲0
## 然後再次make && make install
$ cd testpack $ cat var/test/test.xml #此時應該正確顯示中文 $ /usr/local/mmseg3/bin/mmseg -d /usr/local/mmseg3/etc var/test/test.xml $ /usr/local/coreseek/bin/indexer -c etc/csft.conf --all $ /usr/local/coreseek/bin/search -c etc/csft.conf 網絡搜索