linux rails3安装 thinking sphinx插件

rails3

 

1.下载coreseek-4.1-beta.tar.gz,可以在linux上运行下面命令下下载:

wget http://www.coreseek.cn/uploads/csft/3.2/coreseek-4.1-beta.tar.gz

 

2. 进行解压

tar xzvf coreseek-4.1-beta.tar.gz

 

安装时要注意:是否为root权限,有些东西是要root权限才能安装上

3.进入coreseek-4.1-beta目录下

cd mmseg-3.2.14
./bootstrap    #输出的warning信息可以忽略,如果出现error则需要解决
./configure --prefix=/usr/local/mmseg
make && make install
#可以去/usr/local 下查看一下是否存在mmseg文件夹,如果没有文件夹,请重新运行一遍上面代码。

 

 

4.注意mmseg文件夹所在的目录与下面代码对应

 cd csft-3.2.14 或者 cd csft-4.0.1 或者 cd csft-4.1
 sh buildconf.sh    #输出的warning信息可以忽略,如果出现error则需要解决
 ./configure --prefix=/usr/local/coreseek  --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg/lib/ --with-mysql 
 make && make install

 

 

5.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 
  exceptions: RAILS_ROOT/log/sphinx_exception.log 
  #项目目录下log文件夹中新建一个sphinx_exception.log文件,这个路径也修改为对应路径 
  chinese_dictionary: /usr/local/mmseg/etc/ 
  #中文字典路径 
  bin_path: /usr/local/coreseek/bin 
test: 
  <<: *my_settings 
production: 
  <<: *my_settings 

 

6.如果是运行开发 

rake ts:config  
生成一个development.sphinx.conf
 
生产:RAILS_ENV=production rake ts:config
生成一个production.sphinx.conf 

 

注意:
把 listen = localhost:3312  修改为 listen = 127.0.0.1:9312
 
并且所有 charset_type = utf-8 修改为 charset_type = zh_cn.utf-8
并且所有 charset_type = zh_cn.utf-8 下添加 charset_dictpath = /usr/local/mmseg/etc/

 

7.再做索引

rake ts:index INDEX_ONLY=true
生产:RAILS_ENV=production ts:index INDEX_ONLY=true

 

8.thinkingsphinx用法:

实时索引

最常用的就是实时索引,它要求我们在被索引的模型中增加一个属性,名为delta。
ruby script/generate migration AddDeltaToTopic delta:boolean
class AddDeltaToTopic < ActiveRecord::Migration
  def self.up
    add_column :topics, :delta,:boolean, :default => true, :null => false
    add_column :posts, :delta,:boolean, :default => true, :null => false
  end

  def self.down
    remove_column :topics, :delta
    remove_column :posts, :delta
  end
end
  define_index do
    indexes :title,:sortable => true
    indexes first_post.body,:as => :body,:sortable => true
    indexes author
    has :created_at,:updated_at,:forum_id,:digest
    #声明使用实时索引
    set_property :delta => true
  end
  define_index do
    indexes topic(:title),:as => :title ,:sortable => true
    indexes body,:sortable => true
    indexes author
    has :created_at,:updated_at,:forum_id
    #声明使用实时索引
    set_property :delta => true
  end

定时索引
set_property :delta => :datetime, :threshold => 1.hour
一小时索引一次,实际上是重建所有索引,所以注意间隔时间不要短于建立索引的时间。

默认使用updated_at,这样就不用给被索引模型添加delta属性了。

需要结合的重建索引的命令为rake thinking_sphinx:index:delta或rake ts:in:delta

延时索引
set_property :delta => :delayed

 

9.搜索参数与配置方式

多模型查询
ThinkingSphinx::Search.search "term", :classes => [Post, User, Photo, Event]

指定匹配模式
SPH_MATCH_ALL模式,匹配所有查询词(默认模式)。
Topic.search "Ruby Louvre",:match_mode => :all
Topic.search "Louvre" 
PH_MATCH_ANY模式,匹配查询词中的任意一个。
Topic.search "Ruby Louvre", :match_mode => :any
SPH_MATCH_PHRASE模式,将整个查询看作一个词组,要求按顺序完整匹配。
Topic.search "Ruby Louvre", :match_mode => :phrase 

SPH_MATCH_BOOLEAN模式,将查询看作一个布尔表达式。
Topic.search "Ruby | Louvre, :match_mode => :boolean 
SPH_MATCH_EXTENDED模式,将查询看作一个Sphinx内部查询语言的表达式。
User.search "@name pat | @username pat", :match_mode => :extended 
加权
为了提高搜索质量,我们可以对某些模型或字段进行加权,提高它们的优先度。默认都是1
User.search "pat allan", :field_weights => { :alias => 4, :aka => 2 }
ThinkingSphinx::Search.search "pat", :index_weights => { User => 10 }

 

 

10.怎么指定model所对应的表,以及model索引写法

#encoding: utf-8
class Product < ActiveRecord::Base
  set_table_name "product"  #设定model所对应的表,可以是复数或单数

  define_index do 
    indexes :name, :sortable=>true   ##索引的字段,如果其他字段也要索引,就重新写一句 
    indexes product_type.Title, :as => :product_type_title  #表关联索引
    indexes :StartCity, :sortable=>true
    has :Sort, :ShowStatus   #搜索时有条件,必须要添加到has里
    has pinstances.comment_num, :as => :pinstance_comment_nums,:type=>:integer
    has pinstances.mall.grade,:as => :mall_grade,:type=>:integer
    #has :updated_at 
    set_property :delta => true    ##代码实时索引,并且表中要有delta字段 
    #set_property :delta => :datetime, :threshold => 1.hour
  end
  
 
end

 

11.搜索里的参数

Product.search key,    :page => page,
                       :per_page => per_page,
                       :order => order,
                       :with => search_params,
                       :star => true, 
                       :match_mode => :extended2, 
                       :field_weights => { :brand_name => 4,:brand_synonym => 3, :code => 4, :full_names =>2},
                       :sort_mode => :extended

 

 

你可能感兴趣的:(sphinx)