Rails与Sphinx的整合
如何在 Rails 项目里添加全文索引功能呢。下面介绍一下用sphinx-for-chinese 提供的Rails插件给Rails项目添加全文索引的过程
前提是你的机器上已经成功安装了 Sphinx-for-chinese,如果还没有安装,可以参考 Debian/Linux下 sphinx-for-chinese的安装
- 创建项目目录
$ rails --database=mysql demo $ cd demo
- 修改 config/database.yml文件,添加连接数据库的信息
development: adapter: mysql encoding: utf8 reconnect: false database: demo_development pool: 5 username: user password: pass socket: /var/run/mysqld/mysqld.sock
说明:加粗部分是添加的 - 创建数据库
demo$ rake db:create RAILS_ENV='development'
- 创建搜索控制器
demo$ ruby script/generate controller search index result
- 修改 app/controllers/search_controller.rb 文件
class SearchController < ApplicationController def index end def result @query = params['query'] @sphinx = Sphinx::Client.new @results = @sphinx.Query(@query) end end
说明:加粗部分是添加的 - 修改 app/views/search/index.html.erb 文件,以下是修改后的文件内容
<% form_tag :action =>'result' do %> <%= text_field_tag :query,'' %> <%= submit_tag '查询' %> <% end %>
- 修改 app/views/search/result.html.erb 文件,以下是修改后的文件内容
搜索 <strong><%= @query %></strong> 获得 <%= @results['total_found'] %> 条匹配结果,用时 <%= @results['time'] %>秒。</br> <legend>查询统计:</legend> <% @results['words'].each do |word, info| %> <strong><%= word%></strong>在总共 <%= info['docs']%> 个文档中命中 <%= info['hits']%> 次。 <% end %> <ol> <% @results['matches'].each do |doc| %> <li>doc_id=<%= doc['id']%>, weight=<%= doc['weight']%> <% doc['attrs'].each do |attr, value| %>, <%= attr%>=<%= value%> <% end %></li> <% end %> </ol>
- 启动服务
demo$ ruby script/server
打开浏览器,输入 http://3000/search 你就可要看到一个搜索框,输入查询关键字,点击“查询”按钮就可以看到搜索结果。 以下是我使用 sphinx-for-chinese自带的测试数据截的图。