2010-03-04

Rails与Sphinx的整合

如何在 Rails 项目里添加全文索引功能呢。下面介绍一下用sphinx-for-chinese 提供的Rails插件给Rails项目添加全文索引的过程 前提是你的机器上已经成功安装了 Sphinx-for-chinese,如果还没有安装,可以参考 Debian/Linux下 sphinx-for-chinese的安装
  1. 创建项目目录
    $ rails --database=mysql demo
    $ cd demo
  2. 修改 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
    说明:加粗部分是添加的
  3. 创建数据库
    demo$ rake db:create RAILS_ENV='development'
  4. 创建搜索控制器
    demo$ ruby script/generate controller search index result
  5. 修改 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
    说明:加粗部分是添加的
  6. 修改 app/views/search/index.html.erb 文件,以下是修改后的文件内容
    <% form_tag :action =>'result' do %>
      <%= text_field_tag :query,'' %>
      <%= submit_tag '查询' %>
    <% end %>
  7. 修改 app/views/search/result.html.erb 文件,以下是修改后的文件内容
    搜索 <strong><%= @query %></strong> 获得 <%= @results['total_found'] %> 条匹配结果,用时 <%= @results['time'] %>秒。</br>
    <legend>查询统计:</legend>
    <% @results['words'].each do |word, info| %>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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>
  8. 启动服务
    demo$ ruby script/server
    打开浏览器,输入 http://3000/search 你就可要看到一个搜索框,输入查询关键字,点击“查询”按钮就可以看到搜索结果。 以下是我使用 sphinx-for-chinese自带的测试数据截的图。
    • 查询界面截图 搜索界面截图
    • 查询结果界面截图搜索结果截图
blog comments powered by Disqus