Discuz X1.5+Sphinx帖子全文检索功…

Discuz x1.5带有Sphinx的接口,可是相关文档却几乎没有,功能基本上不能使用。
下面就让我来说说如何安装Sphinx并将它集成到Discuz X1.5中。
注意: 前提是您必须有一个独立的主机或者vps!
以下操作均在ubuntu server 9.04中进行的,其它系统操作相差不大。

下载安装文件
  1. wget http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.13.tar.gz
  2. tar zxvf coreseek-3.2.13.tar.gz
  3. cd coreseek-3.2.13
复制代码
这里下载的是coreseek,它由国人基于Sphinx二次开发,更适合中文搜索。
里面包含修改后的sphinx(csft)及中文分词程序mmseg

安装mmseg
安装coreseek开发的mmseg,它为sphinx提供中文分词功能
  1. cd mmseg-3.2.13
  2. ./bootstrap
  3. #ubuntu环境下,需要使用ACLOCAL_FLAGS="-I /usr/share/aclocal" ./bootstrap
  4. ./configure --prefix=/usr/local/mmseg
  5. make
  6. make install
复制代码
安装完成后,mmseg使用的词典和配置文件,将自动安装到/usr/local/mmseg/etc中
其中uni.lib就是分词默认使用的词典
如果觉得这个词库词量过小,可到搜狗上下载词库: http://pinyin.sogou.com/dict/list.php
很多词库找不到TXT版的下载,可以直接通过地址: http://pinyin.sogou.com/dict/download_txt.php?id=词库id ,来下载
然后通过下面这种方式生成词典,替换掉默认词典就可以了
  1. /usr/local/mmseg/bin/mmseg -u words.txt # utf-8编码
  2. # 生成的文件名默认为原文件名加.uni后缀
  3. cp words.txt.uni /usr/local/mmseg/etc/uni.lib
复制代码
安装sphinx
  1. cd csft-3.2.13
  2. #执行configure,进行编译配置:
  3. ./configure --prefix=/usr/local/sphinx \
  4. --with-mysql=/usr/local/mysql/ \
  5. --with-mysql-includes=/usr/local/mysql/include/mysql/ \
  6. --with-mysql-libs=/usr/local/mysql/lib/mysql/ \
  7. --with-mmseg=/usr/local/mmseg/ \
  8. --with-mmseg-includes=/usr/local/mmseg/include/mmseg/ \
  9. --with-mmseg-libs=/usr/local/mmseg/lib/
  10. make
  11. make install
复制代码
注意:请修改/usr/local/mysql/为相应的mysql目录

配置sphinx
1、编写适合discuz x1.5的配置文件
  1. vim /usr/local/sphinx/etc/csft.cnf
复制代码
文件内容请从这里下载:http://blog.2332.cn/files/sphinx/csft.conf
把其中的数据库信息修改自己mysql服务器信息,同时不要忘了修改相应的表名前缀。
2、建立sph_counter,在数据库中执行以下语词
  1. CREATE TABLE IF NOT EXISTS `sph_counter` (
  2.   `counter_id` int(10) NOT NULL,
  3.   `max_doc_id` int(10) NOT NULL,
  4.   PRIMARY KEY (`counter_id`)
  5. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
复制代码
运行sphinx
1、生成索引文件
索引文件是检索的根据,如果数据量大的话,第一次运行速度会比较慢
执行以下命令:
  1. /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/csft.conf --all
复制代码
2、运行sphinx程序
  1. /usr/local/sphinx/bin/searchd --config /usr/local/sphinx/etc/csft.conf
复制代码
3、加入crontab计划任务
这样的目的是每分钟自动更新索引,以保证检索引擎可以获得最新的数据
  1. vim /etc/crontab
复制代码
加上以下内容:
  1. # Incremental Index posts data
  2. * 0-3 * * * root /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/csft.conf posts_minute --rotate
  3. * 6-23 * * * root /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/csft.conf posts_minute --rotate
  4. 0 4 * * * root /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/csft.conf posts_merge --rotate && /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/csft.conf --merge posts posts_merge --rotate

  5. # Incremental Index threads data
  6. * 0-3 * * * root /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/csft.conf threads_minute --rotate
  7. * 6-23 * * * root /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/csft.conf threads_minute --rotate
  8. 0 4 * * * root /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/csft.conf threads_merge --rotate && /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/csft.conf --merge threads threads_merge --rotate#
复制代码

配置Discuz X1.5

1、后台配置
Discuz X1.5带有一个简单的接口,简单到你直接是没法使用的。
进入后台->全局->搜索设置,如图设置:

2、文件修改
打开/source/module/search/forum.php
  1. //找到以下这行
  2. if($srchtype == 'fulltext' && $_G['setting']['sphinxon']) {
  3. //改成
  4. if($_G['setting']['sphinxon']) {


  5. //再找到下面几行(注意:仅在你discuz版本为gbk时才需要做以下修改)
  6. if($srchtype == "fulltext") {
  7.     $result = $s->query("'".$srchtxt."'", $_G['setting']['sphinxmsgindex']);
  8. } else {
  9.     $result = $s->query($srchtxt, $_G['setting']['sphinxsubindex']);
  10. }
  11. //改成
  12. $_srchtxt = iconv('gbk','utf-8',$srchtxt); //将gbk转成utf-8
  13. if($srchtype == "fulltext") {
  14.     $result = $s->query("'".$_srchtxt."'", $_G['setting']['sphinxmsgindex']);
  15. } else {
  16.     $result = $s->query($_srchtxt, $_G['setting']['sphinxsubindex']);
  17. }
复制代码
至此,OK,大功告成!
哈哈,就这样,你也能拥有一个强大的搜索引擎~
相信这将会是你论坛一大亮点!

补充:操作中可能遇到的问题
1、执行indexer可能报错,报错内容为:error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file
解决办法:
  1. echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf
  2. ldconfig
复制代码
2、生成词典的时候报错,报错内容为:FATAL: index ‘posts’: unknown charset type ‘zh_cn.gbk’
那是因为你的配置文件改成这样了:charset_type = zh_cn.gbk
解决办法:
官方说,还是使用utf-8靠谱,改回来charset_type = zh_cn.utf-8
只要在往数据库取数据时,执行 set names utf-8,即使你的数据表的编码是gbk,也可以正常读出的。
但注意,搜索的时候,还是要将编码转成utf-8后才能正确搜索。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值