依赖
Shell
apt-get install make gcc g++ automake libtool mysql-client libmysqlclient15-dev libxml2-dev libexpat1-dev
补丁
diff
diff -ruN coreseek-4.1-beta/csft-4.1/buildconf.sh coreseek-4.1-beta.p0/csft-4.1/buildconf.sh --- coreseek-4.1-beta/csft-4.1/buildconf.sh 2011-10-07 20:08:56.000000000 +0800 +++ coreseek-4.1-beta.p0/csft-4.1/buildconf.sh 2015-07-22 15:35:21.268304991 +0800 @@ -2,5 +2,5 @@ autoheader / && aclocal / -&& automake --foreign / +&& automake --add-missing --foreign / && autoconf diff -ruN coreseek-4.1-beta/csft-4.1/configure.ac coreseek-4.1-beta.p0/csft-4.1/configure.ac --- coreseek-4.1-beta/csft-4.1/configure.ac 2011-10-07 20:08:57.000000000 +0800 +++ coreseek-4.1-beta.p0/csft-4.1/configure.ac 2015-07-22 15:39:35.112302678 +0800 @@ -10,7 +10,7 @@ SPHINX_CONFIGURE_PART([checking build environment]) AC_CONFIG_AUX_DIR([config]) -AM_INIT_AUTOMAKE([-Wall -Werror foreign]) +AM_INIT_AUTOMAKE([-Wall foreign]) AM_MAINTAINER_MODE AM_PATH_PYTHON AC_CONFIG_SRCDIR([src/searchd.cpp]) @@ -59,6 +59,7 @@ AC_PROG_CC AC_PROG_CXX AC_PROG_RANLIB +AM_PROG_AR dnl Checks for embedded interpretors. INN_ARG_PYTHON diff -ruN coreseek-4.1-beta/csft-4.1/src/sphinxexpr.cpp coreseek-4.1-beta.p0/csft-4.1/src/sphinxexpr.cpp --- coreseek-4.1-beta/csft-4.1/src/sphinxexpr.cpp 2011-10-07 20:08:58.000000000 +0800 +++ coreseek-4.1-beta.p0/csft-4.1/src/sphinxexpr.cpp 2015-07-22 15:40:27.764302198 +0800 @@ -1743,7 +1743,7 @@ /// evaluate arg, return interval id virtual int IntEval ( const CSphMatch & tMatch ) const { - T val = ExprEval ( this->m_pArg, tMatch ); // 'this' fixes gcc braindamage + T val = this->ExprEval ( this->m_pArg, tMatch ); // 'this' fixes gcc braindamage ARRAY_FOREACH ( i, this->m_dValues ) // FIXME! OPTIMIZE! perform binary search here if ( val<this->m_dValues[i] ) return i; @@ -1774,7 +1774,7 @@ /// evaluate arg, return interval id virtual int IntEval ( const CSphMatch & tMatch ) const { - T val = ExprEval ( this->m_pArg, tMatch ); // 'this' fixes gcc braindamage + T val = this->ExprEval ( this->m_pArg, tMatch ); // 'this' fixes gcc braindamage ARRAY_FOREACH ( i, m_dTurnPoints ) if ( val < Expr_ArgVsSet_c<T>::ExprEval ( m_dTurnPoints[i], tMatch ) ) return i; @@ -1820,7 +1820,7 @@ /// evaluate arg, check if the value is within set virtual int IntEval ( const CSphMatch & tMatch ) const { - T val = ExprEval ( this->m_pArg, tMatch ); // 'this' fixes gcc braindamage + T val = this->ExprEval ( this->m_pArg, tMatch ); // 'this' fixes gcc braindamage return this->m_dValues.BinarySearch ( val )!=NULL; }
打补丁方法,进入需要打补丁的源代码目录
Shell
patch -p1 </path/to/coreseek.patch
补丁总结自具体修改主要参考这个文章 http://blog.csdn.net/jcjc918/article/details/39032689
Gist备份: https://gist.github.com/ihipop/fcea2993cc567e060d36
##安装mmseg编译mmseg暂时没有什么压力,按照官方文档来
Shell
$ cd mmseg-3.2.14 $ ./bootstrap #输出的warning信息可以忽略,如果出现error则需要解决 $ ./configure --prefix=/usr/local/mmseg3 $ make && make install
编译csft(Coreseek) 按照上面的方法打了补丁以后 可以在gcc4.7+以上正常编译
Shell
$ cd csft-4.1 $ sh buildconf.sh #输出的warning信息可以忽略,如果出现error则需要解决 $./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
测试用例还是官方用例 调节locale成zh_CN.UTF-8以后进行
Shell
$ 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 #指定关键词的搜索测试 其中,搜索服务是关键词 成功的话会进行分词和结果展示,如果不正常 说明配置有问题。 $ /usr/local/coreseek/bin/search -c etc/csft.conf -a 搜索服务
mysql数据源的配置方法和普通Sphinx差别不大,配置目录下有个csft_mysql.conf 照着改改以后按照上面的方法重建索引以后就能进行测试。
需要注意的是,这个文件没有打开SphinxQL支持 可以在searched段落打开,添加 监听即可(其实还是sphinx的官方配置参数 http://sphinxsearch.com/docs/archives/2.0.1/confgroup-searchd.html )
Shell
listen = 9306:mysql41
配置完了配置文件放到 /usr/local/coreseek/etc下,先运行indexer建立索引,再开启searched即可
Shell
/usr/local/coreseek/bin/indexer -c etc/csft_mysql.conf --all /usr/local/coreseek/bin/searchd -c etc/csft_mysql.conf
如果增量更新索引,用执行 indexer的时候 加上 --rotate
选项即可
端口监听打开了就OK了