要在Rails上使用全文检索,选择一直不多,以前我一直是使用Ferret + Act_as_ferret + rmmseg的.不过Ferret不支持ruby 1.9,好像也很久没更新了.现在Rails上可用的全文检索又多了一个,那就是Thinking Sphinx . JavaEye的 司徒正美 同学已经写了篇介绍TS的大作,详见利用thinking sphinx实现全文检索 .我只是记录一下我在本机的安装和使用.
安装:
define_index do
indexes :content
has :created_at
set_property :delta => true #这个是实时索引,注意,你的model表中得有delta这个字段,类型是boolean
end
rake ts:in
#但是如果没有配置文件的话,你不能配置中文分词,所以还是用下面这个吧
rake ts:index
执行完这个,在config目录,你会看到 development.sphinx.conf 这个文件.tar xvfz mmseg-3.1.tar.gz
mmseg -u unigram.txt
#这时目录下会生成一个unigram.txt.uni文件,这个就是词典了,要改名,这个是必须的,名字也是定死的,只能是uni.lib
mv unigram.uni uni.lib
#然后随便把它放到一个目录去,这个目录在配置Sphinx的时候有用,比如我的
cp uni.lib ~/xdict
charset_type = utf-8
#改为:
charset_type = zh_cn.utf-8
#并在下面多加一句:
charset_dictpath = /home/yanghuan/xdict/ #这个目录就是存放刚才中文词典的目录
ThinkingSphinx.search
#这个不再使用了
ThinkingSphinx::Search.search
ThinkingSphinx.search params[:q],:classes => [Post,Comment],:match_mode => :any
#当 params[:q] = 'this' ,注意这里是一个单词的时候,无法匹配,我理解这个模式是任意匹配其中之一,不知是为何.