在FreeBSD 上配置 Sphinx 搜索引擎
在FreeBSD 上配置 Sphinx 搜索引擎 和 linux 上相比,会有一些差异,而且步骤可能会更加的繁琐。
有些可能无法用 make 系统进行编译,必须手动修改configure 文件,或者代码。或者只能手动编译。
1. 安装 Mmseg
http://www.coreseek.cn/uploads/sources/mmseg-0.7.3.tar.gz
Mmseg 比较成熟,安装的过程一般不会出什么问题。但是还是有一些注意事项:
要下载最新的 0.7.3版本,否则可能会有下面的bug:
1. 不兼容 x64 的操作系统,我的系统就是64位的,一编译,发现出问题了。
2. 可能有很多分词的bug,在中英文混合的时候,分词会非常的不准确。
要手动构造一下词典。如下命令:
mmseg -u unigram.txt
这就会产生一个 :unigram.txt.uni ,用如下的命令重命名:mv unigram.txt.uni uni.lib
2. 安装下面的程序:
更新最新的Port ,然后,升级或者安装下面的程序:
1. Python 2.5 以上
2. autoconf-2.4 以上
3. automake 1.10 以上
4. Bison 2.3 以上
5. Gmake 3.5 以上
6. Libtool 2.2 以上
当然,如果你编译过程中没有出现问题最好,但是,如果出现问题了,建议先升级以上程序。
如果以上软件都升级好了,下载最新 的 3.1 rc1 版本。(coreseek 对sphinx的改动版本)
http://www.coreseek.cn/uploads/csft/3.1/Source/csft-3.1.tar.gz
然后,编译。
我测试过,这个编译没有什么问题。
3、安装libsphinxclinet
如果要安装sphinx 的PHP扩展,就要事先编译libsphinxclinet。你要去官方网站下载最新的sphinx 程序。
Wget http://sphinxsearch.com/downloads/sphinx-0.9.9-rc2.tar.gz
Tar -xzf sphinx-0.9.9-rc2.tar.gz
Cd sphinx-0.9.9-rc2/api/libsphinxclinet
你不能直接编译这个程序,在linux 下面可以。但是,在FreeBSD 上并不可以。
configure: error: C++ preprocessor "/lib/cpp" fails sanity check
这个错误怎么修改才能改好,我暂时没有去研究。一般来说,解决的方法可以这样:
1. 用gcc 命令直接编译。
2. 用automake 重新创建一份编译程序。
下面说明一下,如何用gcc 命令编译一份动态链接库。
库文件简介:
简单地说,库(Library)就是一组已经写好了的函数和变量、经过编译代码,是为了能够提高开发效率和运行效率而设计的。库分为静态库(Static Library)和共享库(Shared library)两类。静态库文件的扩展名是.a,共享库文件的扩展名是.so(在CYGWIN环境下,分别叫做.o和.dll)。共享库现在常常被叫做动态库,是由于很多人借用了MS Windows的DLL(Dynamic Linked Library)这个词。
(1)静态库
静态是指每个用到该库的应用程序都拥有一份自己的库拷贝;应用程序运行的时候,即使将库删除也没有问题,因为应用程序自己已经有了自己的拷贝。
(2)共享库
一个共享库有可能被多个所有应用程序共享。因此,对每个应用程序来说,即使不再使用某个共享库,也不应将其删除。此外,应用程序需要正确的环境变量设置(LD_LIBRARY_PATH),从而找到共享库所在的位置,否则,应用程序运行时会报告找不到这个库。
一般来说,如果库本身比较大的话,最好编译成 共享库,否则,联合编译后,文件会变的比较大。对于上面的 libclientsphinx ,应为规模比较小,编译成静态的或者动态的都可以。我这里选择编译成动态的:
mv sphinx_config,h.in sphinx_config.h
gcc -c -fPCI sphinx.c
gcc -shared -fPIC -o libsphinxclient.so sphinx.o
Mv libsphinxclient.so /usr/local/lib
Mv sphinx.h /usr/local/include
这样就可以编译成功了。
编译PHP 就比较简单了
Cd /ext path/sphinx
Phpize
./configure --with-php-config=/usr/local/bin/php-config --with-sphinx=/usr/local
Make
make install
这样就OK 了。当然,如果你的extension_path 改动过的话,把编译好的扩展放到合适的位置上去。