thinking_sphinx在rails使用的简单描述
写作目的:由于项目需要,需要在rails3中使用插件‘thinking_sphinx’,翻阅资料无数,没有最终我想要的结果,有的只是几年前的杰作,而且是抄来抄去,没有任何创新,也就是说过时了。痛定思痛我决定写一篇文章来做简单的介绍。
第一步:在Gemfile添加gem包如下:
gem 'mysql2'
gem "riddle", "~> 1.5.0"
gem "thinking-sphinx", "~> 2.0.10"
当然bundle install 是少不了的。source 我改成了 'http://ruby.taobao.org',速度比较快。
第二步:在Config下添加文件sphinx.yml,内容如下:
development: &my_settings
#这个路径是我之前安装的支持中文搜索的,后续会介绍怎么安装。
bin_path: /usr/local/coreseek/bin
#这个路径是我之前安装的支持中文搜索的,后续会介绍怎么安装。
charset_dictpath: /usr/local/mmseg3/etc
charset_type: zh_cn.utf-8
ngram_len: 0
test:
<<: *my_settings
production:
<<: *my_settings
第三步:定义索引
define_index do
indexes content
indexes :name
indexes title
#实现实时搜索,不然你新增的数据无法搜索的到。
indexes delta
set_property :delta => true
end
第四步:执行命令
rails g migration add_delta_to_posts delta:boolean
修改生成文件内容
def change
add_column :posts, :delta, :boolean, :default => true, :null => false
end
执行rake db:migrate
第五步:修改index.html.erb页面
<%= form_tag(posts_path,:method=>'get') do %>
<%= text_field_tag :search, params[:search] %>
<div><%= submit_tag 'Search', :name => nil %></div>
<% end %>
第六步:修改controller
def index
# @posts =Post.search(params[:search])
if params[:search].nil?
@posts = Post.all
else
@posts = Post.search params[:search]
end
respond_to do |format|
format.html # index.html.erb
format.json { render json: @posts }
end
end
第七步:rake ts:config、rake ts:rebuild、rake ts:index都能自动生成文件development.sphinx.conf,而
rake ts:index INDEX_ONLY 不生成文件,只是建立索引。
第八步:启动服务 rake ts:start
关闭服务 rake ts:stop
第九步:
启动rails: rails s
第十步:访问页面 中英文都应该OK的。