Discuz!官方免费开源建站系统

 找回密码
 立即注册
搜索

[教程] Discuz X1.5+Sphinx帖子全文检索功能搭建

[复制链接]
888168 发表于 2010-10-10 10:54:27 | 显示全部楼层 |阅读模式
本帖最后由 888168 于 2010-11-20 00:57 编辑

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后才能正确搜索。

                                                  
原文:http://blog.2332.cn/archives/729
演示:http://bbs.jingfu.org  

评分

1

查看全部评分

回复

使用道具 举报

wangncet 发表于 2010-10-10 12:23:11 | 显示全部楼层
不错,什么时候也去试下
回复

使用道具 举报

HonestQiao 发表于 2010-10-10 17:58:16 | 显示全部楼层
安装手册:http://www.coreseek.cn/products-install/

配置文件在:https://discuz.dismall.com/forum. ... ead&tid=1816207

感谢 888168  参与 coreseek之discuzx的测试

#      支持Discuz!X1.5广场/论坛的全文搜索
#      支持中文分词查询,支持结果评分排序
#      支持单服务器千万级别以上帖子的检索(亿级别帖子通过分布式也可完善支持)
#      配置界面官方提供,后台操作即可启用(已经由Discuz! 官方集成到管理后台)
#      无需修改任何程序,系统升级无忧无虑(PHP搜索代码部分由Discuz!官方编写)
#      数据不外泄,服务是独享,安全又可靠(你的服务器你做主,全部数据你掌握)
#      DZ官方出接口,CS官方出搜索,很强大(强强联手,专业服务,让你放心使用)
回复

使用道具 举报

jm611 发表于 2010-10-11 15:46:14 | 显示全部楼层
顶阿勒。。
回复

使用道具 举报

 楼主| 888168 发表于 2010-10-11 17:05:01 | 显示全部楼层
回复 HonestQiao 的帖子

谢谢,配置文件已经更新。。。
回复

使用道具 举报

la367 发表于 2010-10-11 17:56:39 | 显示全部楼层
进来了解一下~~
回复

使用道具 举报

cmdcos 发表于 2010-10-30 22:26:06 | 显示全部楼层
请问windows 的怎么安装设置,我windows下安装后不能启动,0.9.9稳定版。
QQ截图未命名.jpg
回复

使用道具 举报

yunho 发表于 2010-10-31 16:16:00 | 显示全部楼层
有谁弄成功了?
回复

使用道具 举报

 楼主| 888168 发表于 2010-11-15 22:44:03 | 显示全部楼层
回复 cmdcos 的帖子

windows没尝试过,如果是自己的服务器,建议叫机房换成linux系统,效率高很多。
回复

使用道具 举报

cmdcos 发表于 2010-11-19 00:10:05 | 显示全部楼层
回复 888168 的帖子

问题是 不懂 linux 啊; 更不懂 远程 操作linux
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-8-18 12:04 , Processed in 0.124252 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表