特别注意:如果用的是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
cd csft-4.1sh 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-includes=/usr/include/mysql/include --with-mysql-libs=/usr/include/mysql/lib(后面的这几个路径是指向mysql的安装目录根据实际情况来定,官方文档有)make && make install
官网:http://www.coreseek.cn/products-install/install_on_bsd_linux/至此coreseek安装成功了 usr/local/ 下会出现coreseek文件夹证明安装成功
如果出现以下错误,请从新编译 生成
如果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
。
注:最后一步make的时候本人在线上阿里云安装出现这个问题,前两种都没解决,是用方法三解决,l这是官网的文档,http://www.coreseek.cn/product_install/install_on_bsd_linux/#mysql
## 如果出现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 网络搜索
看到如上图的返回结果,那么恭喜你 安装成功,***************************************以上为安装步骤******************************************************************
coreseek 安装:参考 http://blog.atime.me/note/sphinx-coreseek-summary.html#0315ab 感谢他的文章给予我很大的帮助