ここではかなり初心者なので、誰かが助けてくれることに感謝します。
Sunspot を使用して、自分のサイトの検索にファセットを追加しようとしています。Ryan は素晴らしい Railscast をリリースしたばかりです。私はそれを機能させ、追加のファセットを追加することができました。私の問題は、ファセットが互いに独立していることです。3 つの異なる属性に 3 つのファセットがある場合、既に選択したファセットを選択すると、両方のファセットに該当する結果のみを表示したいと思います。現時点では、あるファセットから別のファセットに切り替わるだけです。そんなに難しくないと思いますが、やり方がわかりません。
私はこのチュートリアルを見つけました: http://blog.upubly.com/2011/01/06/using-sunspot-in-your-views/ これは私がやりたいことをしていると思います。これを機能させようとしましたが、1 つのファセットだけで機能させようとしても、結果がリストされていません。ファセット名だけで、他には何もありません。
考え?
ありがとうございました!!
アップデート
私がやろうとしていることのコードサンプルは次のとおりです。
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 は例と同じままにしました。ファセットが他のモデルの 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 はすでに私にとって大きな助けになっているので、ここに回答を投稿してくれたすべての人に感謝します。