Sunspot Solr - работа с гранями - PullRequest
1 голос
/ 16 июня 2011

Я настроил граненый поиск, используя 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]). Я хочу, чтобы подсчет фасетов ВСЕГДА вычислялся без этого условия.

Мне нужно выполнить два поиска? Один для поиска без условий (для вычисления количества фасетов) и один с условием для получения результатов. Или есть способ сделать это в одном запросе SOLR.

Спасибо

Хэмиш

1 Ответ

8 голосов
/ 16 июня 2011

Solr имеет (и Sunspot поддерживает) концепцию, называемую «множественный выбор граней», которая вам здесь нужна.По сути, вы можете сказать Solr игнорировать условие (или несколько условий) только для вычисления определенного фасета.Итак, что вы хотели бы сделать здесь:

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

Надеюсь, это поможет.

...