当前位置: 首页 > 工具软件 > RMMSeg > 使用案例 >

Thinking Sphinx + Coreseek + rmmseg的安装与使用

喻选
2023-12-01

要在Rails上使用全文检索,选择一直不多,以前我一直是使用Ferret + Act_as_ferret + rmmseg的.不过Ferret不支持ruby 1.9,好像也很久没更新了.现在Rails上可用的全文检索又多了一个,那就是Thinking Sphinx . JavaEye的 司徒正美 同学已经写了篇介绍TS的大作,详见利用thinking sphinx实现全文检索 .我只是记录一下我在本机的安装和使用.

 

安装:

 

  1. 安装coreseek:Coreseek全文搜索服务器,它是基于Sphinx的.作者已经提供各个平台的可用版本,并提供下载 我的机器是ubuntu 9.04,所以安装非常的简单,直接下载deb包回来安装即可,没有遇到任何问题.
  2. 安装mmseg:这个是用来中文分词的.刚才那个下载地址就可以下载,除了下载deb安装包(如果你也是使用ubuntu的话),还记得下载它的源代码回来,因为生成中文词典的时候要用.
  3. 安装thinking sphinx :我是使用gem的方法安装,详细的安装方法,请参看官方的说明文档,很详细.
配置:
  1. 在config/environment.rb文件中加上一句:config.gem "freelancing-god-thinking-sphinx",:lib => 'thinking_sphinx',:version => '1.2.5'
     
  2. 在你的项目根目录下的Rakefile文件上加上: require 'thinking_sphinx/tasks'
     这个的作用就是你可以使用TS为你准备的很多个rake task.
  3. 在你的model中加上索引: #基本上都是这样子的
    define_index do
          indexes :content
          has :created_at
          set_property :delta => true #这个是实时索引,注意,你的model表中得有delta这个字段,类型是boolean
    end
     
  4. 执行这个rake(请注意第 2 步): #如果你不生成配置文件的话
    rake ts:in
    #但是如果没有配置文件的话,你不能配置中文分词,所以还是用下面这个吧
    rake ts:index
     执行完这个,在config目录,你会看到 development.sphinx.conf 这个文件.
  5. 在修改 development.sphinx.conf 配置文件之前,要先生成中文分词的词典.  cd mmseg-3.1/data
    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
     
     
  6. 修改  development.sphinx.conf 配置文件 #找到这个文件中 charset_type = utf-8 的地方
    charset_type = utf-8
    #改为:
    charset_type = zh_cn.utf-8
    #并在下面多加一句:
    charset_dictpath = /home/yanghuan/xdict/ #这个目录就是存放刚才中文词典的目录
     
中文全文检索基本上大功告成.
有些值得注意的地方:
  1. 由于使用了实时索引,所以之前的数据是没有索引的,如果你要重建索引的话,可以使用 rake ts:rebuild
     但是不知为何,我重建索引的时候,配置文件居然也变成了默认,所以如果你修改过配置文件的话,要小心.
  2. 1.2版本以上 #1.2版本以上,使用
    ThinkingSphinx.search
    
    #这个不再使用了
    ThinkingSphinx::Search.search
     
  3. ThinkingSphinx.search params[:q],:classes => [Post,Comment],:match_mode => :any
    #当 params[:q] = 'this' ,注意这里是一个单词的时候,无法匹配,我理解这个模式是任意匹配其中之一,不知是为何.
     
其它的Thinking Sphinx的使用方法可以上它的官方网站看,上面已经介绍得很详细了.而coreseek的安装也已经极为方便,也就是中文分词的配置是要注意一下的.
在网上也找到其它几篇写得很详细的coreseek安装的文章,共享之.
 类似资料: