1

Sunspot、SOLRを使用してファセット検索をセットアップしました。このような:

for row in @search.facet(:facet_id).rows
    link_to row.instance.name, :url_for(:search => params[:q], :facet_id => row.value)

私の問題は、次のようにコントローラーでファセット検索を実行するときです。

    @search = Sunspot.search(MyModel) do
      keywords search_text 
      facet    :facet_id
      with(:facet_id, params[:facet_id]) if params[:facet_id].present?
    end

with(:facet_id, params[:facet_id]) 条件に基づいてファセット数が計算されるようになりました。この条件なしでファセット数が常に計算されるようにします。

検索を 2 回実行する必要がありますか? 1 つは条件なしの検索用 (ファセット数を計算するため) で、もう 1 つは条件付きで結果を取得するためのものです。または、1 つの SOLR クエリでこれを行う方法はありますか。

ありがとう

ハミッシュ

4

1 に答える 1

8

Solrには「マルチセレクトファセット」と呼ばれる概念があります(そしてSunspotはこれをサポートしています)。これはここで必要なものです。基本的に、特定のファセットを計算するためだけに、条件(または複数の条件)を無視するようにSolrに指示できます。したがって、ここで実行したいことは次のとおりです。

Sunspot.search(MyModel) do
  facet_restriction = with(:facet_id, params[:facet_id])
  facet(:facet_id, :exclude => facet_restriction)
end

お役に立てば幸いです。

于 2011-06-16T14:22:50.093 に答える