随笔-167  评论-65  文章-0  trackbacks-0
环境: sphinx 0.9.8 rc2 + libmmseg 0.7.3 + thinking_sphinx 1.2.8 + ubuntu 8.1.0 Desktop version

效果预览:
1, http://www.zikii.com/ 这个网站 也是基于 sphinx 实现的
2,我的



由于项目需要,需要实现站内搜索,全文检索和 中文分词 功能,最后选型了 sphinx + libmmseg + thinking_sphinx , 折腾了好大一会,最后测试成功
sphinx 是俄国人开发的opensourse 搜索引擎,索引速度很快, libmmseg 是中国人开发的中文分词程序,thinking_sphinx 是封装调用sphinx的rails plugin

下面用到的所有资源 打包下载:
http://www.uushare.com/user/fl1429/file/2043579

1,项目的所有的源码编译安装 , 全部移到 /root 下进行,凡是出现权限不够的, 在命令前加上 sudo

2,安装 libmmseg

./configure
make
make install
具体可以参考:
http://www.coreseek.cn/opensource/mmseg/

3,安装 ruby 扩展,进入 mmseg ruby 目录下 (注意最后面有一个点)

cd ruby
cp /usr/local/include/mmseg/*.h .
cp ../src/*.h .   

cp ../src/css/*.h .
ruby extconf.lin.rb
make
sudo make install
成功的话,可以到irb下,测试看看是否成功了
irb 
require 'mmseg'
注意:如果在这一步出错,且出错提示为:

css/UnigramCorpusReader.cpp:89: error: ’strncmp’ was not declared in this scope

则需手工编辑.src/css目录下UnigramCorpusReader.cpp 文件,在其第一行加上

#include <string.h>

然后重新 make,即可通过

4,创建辞典文件

进入 mmseg 的 data 目录下

mmseg -u unigram.txt

把生成的文件名改为 uni.lib

5,安装sphinx (把两个补丁放入 解压后 的 sphinx下)

cd sphinx-0.9.8-rc2

patch -p1 < sphinx-0.98rc2.zhcn-support.patch #patch中文补丁

patch -p1 < fix-crash-in-excerpts.patch # patch 防crash 补丁

Copy mmseg安装文件夹下 src/csr_typedefs.h 和

src/css/SegmenterManager.h 到Sphinx安装文件夹下的 src

文件夹下

./configure

make
sudo make install

注意:如果在这一步出现

/usr/local/include/mmseg/freelist.h:22: error: ‘strlen’ was not declared in this scope

的错误,手工修改 /usr/local/mmseg/include/mmseg/freelist.h

在上面添加
#include <string.h>

以上的配置 sphinx 就支持 中文分词 搜索了。。。

Demo:

1,依照 Ryan 的例子 配置 好基本的英文搜索

http://railscasts.com/episodes/120-thinking-sphinx

2,重点是 model 里的 定义索引

define_index do

indexes content
indexes :name, :sortable => true
indexes comments.content, :as => :comment_content
indexes [author.first_name, author.last_name], :as => :author_name
has author_id, created_at
end

3,把上面生成的 uni.lib 辞典文件 拷入 项目的 lib 下 (或者别的地方,看你配置里的charset_dictpath的,不编译的话,可以用别人现成的uni.lib)

4,在项目的 config 下新建一个 sphinx.yml 文件
development: &my_settings
enable_star: 1
min_prefix_len: 0
min_infix_len: 2
min_word_len: 1
max_results: 70000
morphology: none
listen: localhost:3312
charset_dictpath: /home/feng/RailsProject/Search/lib
test:
<<: *my_settings
production:
<<: *my_settings

上面的
/home/feng/RailsProject/Search/lib 可以写成 "#{RAILS_ROOT}/lib"
5,生成配置文件

rake ts:config

 这样config 下会生成一个 development.sphinx.conf 文件

找到 charset_type = utf-8 把后面 utf-8 修改为 zh_cn.utf-8,并在下面添加如下语句

charset_dictpath = /home/feng/RailsProject/Search/lib (你工程的lib路径)

6,建立索引

rake ts:index INDEX_ONLY=true
注意后面必须添加 INDEX_ONLY=true不然的话,配置文件会被重置,还有不要写成 INDEX_ONLY = true


7,启动sphinx服务

rake ts:start
8,启动webrick

注意,sphinx 必须在webrick的前面 先启动
我的demo项目,其实就是上面ryan 的,下载后可以看到我的具体配置,或者详细的内容

http://www.uushare.com/user/fl1429/file/2043752


ref:
http://wiki.github.com/cogentsoft/zbs/180787
http://www.javaeye.com/topic/431217?page=1
http://www.javaeye.com/topic/196451
http://blog.sina.com.cn/s/blog_412d58ec010090pq.html
http://freelancing-god.github.com/ts/en/rake_tasks.html


write by feng
posted on 2009-09-22 17:15 fl1429 阅读(1638) 评论(0)  编辑  收藏 所属分类: Rails

只有注册用户登录后才能发表评论。


网站导航:
 
已访问数:
free counters