思考Sphinx分面搜索实现示例?

时间:2011-03-09 00:17:27

标签: ruby-on-rails thinking-sphinx faceted-search

我正在组建一个存储库类型的rails 3站点。 我安装了Thinking Sphinx并在我的网站上工作,因为我可以输入localhost:3000/articles?search=test&page=2这样的网址,它会返回预期的结果。

我是Rails的新手(一般都是网络开发者);我想我可以管理这个模型和控制器方面,但到目前为止的观点让我感到难过。我有一个侧边栏我想用作搜索界面。我最接近的是这个(作为侧边栏部分的一部分呈现):

<% form_tag @search, :method => :get do %> 
    <%= text_field_tag :search, params[:search] %> 
    <%= submit_tag "Search"%> 
<% end %>

搜索方法在我的文章#index controller中,当我在浏览器指向该页面时测试它(路由为/articles)时,它按预期工作,但是使用这个奇怪的URL:{{ 1}}。当浏览器首次指向根路径时,没有任何反应。

所以,我认为这些是我需要解决的主要问题:

  1. 编辑 - 解决(见下文)
  2. 我应该将搜索方法移动到自己的控制器,还是应该成为文章控制器的一部分?目前,文章将是唯一被索引的模型。
  3. 编辑 - 解决(见下文)
  4. 有没有人使用Rails 3和Thinking Sphinx获得分面搜索视图的任何好示例代码?就像我说的那样,我是一个新手,并且对于通过视图实现进行浏览的文档感到有点慌乱。但是,只要合理完成,我就擅长阅读和解释代码。
  5. 提前致谢!

    解决:

    1. 在尝试搜索之前,如何让“搜索”按钮调用索引方法? (我已将localhost:3000/articles?utf8=✓&search=test&commit=Search替换为@search)来解决此问题。

    2. 使用articles_path解决,我之前遇到过麻烦,但现在似乎正在运作。

1 个答案:

答案 0 :(得分:3)

嘿 这是我切换到solr之前我的网站工作方式的摘录

产品有很多类别,我们告诉sphinx我们要将它们作为方面索引

class Product < ActiveRecord::Base {    
    has_many :categorisations, :dependent => :destroy
    has_many :categories, :through => :categorisations        

 define_index do
    indexes product_name,
    indexes description
    indexes categories(:name), :as => :category,:facet => true      
 end 
}

结果控制器

class ResultsController < ApplicationController
  def index
      @facets = Product.facets params[:qt], :conditions => {:category => params[:category}},:page => params[:page], :per_page => 20
      @products = @facets.for
  end
end

然后在视图中你可以做类似

的事情
<% @facets.each do |facet, facet_options| %>
  <span><%= facet %></span>
  <ul>
  <% facet_options.each do |option, count| %>
    <li><%= link_to "#{option} (#{count})",
      :params => {facet => option, :page => 1} %></li>
  <% end %>
  </ul>
<% end %>