【发布时间】:2011-08-11 19:54:36
【问题描述】:
这里几乎是个菜鸟,所以我很感激有人可以提供任何帮助。
我正在尝试通过 Sunspot 在我的网站上的搜索中添加分面。 Ryan 刚刚发布了一个很棒的 Railscast,让我开始了:http://railscasts.com/episodes/278-search-with-sunspot。我得到了这个工作,并且能够添加额外的方面。我的问题是这些方面是相互独立的。如果我在 3 个不同的属性上有 3 个方面,当我选择一个方面时,我已经选择了一个方面,我只想显示属于这两个方面的结果。到目前为止,它只是从一个方面切换到另一个方面。我觉得这不应该那么困难,但我不知道该怎么做。
我确实找到了这个教程:http://blog.upubly.com/2011/01/06/using-sunspot-in-your-views/,我认为它正在做我想做的事。我试图让它工作,但即使我试图让它只在一个方面工作,我也没有列出任何结果。只是方面名称,然后没有其他内容。
想法?
谢谢!!
更新
这是我正在尝试做的代码示例:
调整 Railscasts 代码我得到了这个:
在我的 StylesController 中:
def index
@search = Style.search do
fulltext params[:search]
facet :departmental, :seasonal, :classifier
with(:departmental, params[:department]) if params[:department].present?
with(:classifier, params[:classification]) if params[:classification].present?
with(:seasonal, params[:season]) if params[:season].present?
end
在我的样式索引视图中(我知道我需要压缩它)
= form_tag styles_path, :method => :get do
%p
= text_field_tag :search, params[:search]
= submit_tag "Search", :name => nil
#facets
%h4 Departments
%ul
- for row in @search.facet(:departmental).rows
%li
- if params[:department].blank?
= link_to row.value, :department => row.value
(#{row.count})
- else
%strong= row.value
(#{link_to "remove", :department => nil})
%h4 Classifications
%ul
- for row in @search.facet(:classifier).rows
%li
- if params[:classification].blank?
= link_to row.value, :classification => row.value
(#{row.count})
- else
%strong= row.value
(#{link_to "remove", :classification => nil})
%h4 Seasons
%ul
- for row in @search.facet(:seasonal).rows
%li
- if params[:season].blank?
= link_to row.value, :season => row.value
(#{row.count})
- else
%strong= row.value
(#{link_to "remove", :season => nil})
在我的风格模型中:
searchable do
text :number, :description, :department, :classification, :season
string :departmental
string :classifier
string :seasonal
end
def departmental
self.department
end
def classifier
self.classification
end
def seasonal
self.season
end
还有我的 upubly 代码版本,配对只是试图让“季节性”方面发挥作用:
我将 Search Partial、Search Model 和 SearchHelper 与示例中的相同。我试图弄乱 Helper,因为我的 Facets 将提取文本值,而不仅仅是其他模型的 ID,但无济于事。我没有将我的各种属性设置为单独的模型,因为我认为我不需要那个功能,但我开始不这么想了。
样式控制器:
def index
@title = "All styles"
@search = search = Search.new(params[:search]) # need to set local variable to pass into search method
@search.url = styles_path
@search.facets = [:seasonal]
@solr_search = Style.search do
keywords search.query
with(:seasonal, true)
search.facets.each do |item|
facet(item)
with(:seasonal, params[:season]) if params[:season].present?
end
any_of do
# filter by facets
search.facets.each do |item|
with(item).all_of( params[item].try(:split, "-") ) if params[item].present?
end
end
paginate(:page => params[:page], :per_page => 10)
end
再次感谢您的帮助。绝对是菜鸟,但真的很享受建立这个网站的过程。 Stackoverflow 已经为我提供了巨大的帮助,所以我非常感谢所有在这里发布答案的人。
【问题讨论】:
-
来自创作者github账号github.com/outoftime/sunspot/wiki/Drilling-down-with-facets的分面教程
-
谢谢,我可以按照教程中的方式进行刻面。但我试图包含多个不独立的方面。
-
添加一个简单的缩进示例来说明您如何看待这个工作,这将有助于我们理解为什么建议的解决方案不起作用。输入一个小样本缩进列表(方面信息的层次结构),使用空格进行缩进,然后突出显示帖子的该部分并使用问题输入框顶部的 {} 编辑功能。 ( {} = 代码块,但它使您保持缩进不变)。
-
谢谢,我添加了我的代码 sn-ps。
标签: ruby-on-rails solr sunspot facet