Думаете о примерах реализации фасетного поиска Sphinx?

Я собираю сайт рельсов 3 репозитория. У меня установлен и работает Thinking Sphinx на моем сайте, поскольку я могу вводить URL-адреса, такие как localhost:3000/articles?search=test&page=2, и он возвращает ожидаемые результаты.

Я новичок в Rails (и в веб-разработке в целом); Я думаю, что могу управлять аспектами модели и контроллера, но представления до сих пор меня поставили в тупик. У меня есть боковая панель, которую я хотел бы использовать в качестве интерфейса поиска. Самое близкое, что я нашел, это (отображено как часть частичной боковой панели):

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

Метод поиска находится в моем контроллере article#index, и когда я тестирую его, когда браузер указывает на эту страницу (маршрутизируется как /articles), он работает, как и ожидалось, но с этим странным URL-адресом: localhost:3000/articles?utf8=✓&search=test&commit=Search. Когда браузер впервые указывает на корневой путь, ничего не происходит.

Итак, я думаю, что это основные проблемы, которые мне нужно решить:

  1. РЕДАКТИРОВАТЬ - решено (см. ниже)
  2. Должен ли я переместить методы поиска в отдельный контроллер или они должны быть частью контроллера статей? На данный момент Article будет единственной проиндексированной моделью.
  3. РЕДАКТИРОВАТЬ - решено (см. ниже)
  4. Есть ли у кого-нибудь хороший пример кода многогранного представления поиска с использованием Rails 3 и Thinking Sphinx? Как я уже сказал, я в некотором роде новичок, и меня немного смущает документация, которая бегло просматривает реализацию представления. Тем не менее, я неплохо разбираюсь в чтении и интерпретации кода, если он достаточно завершен.

Заранее спасибо!

Решено:

  1. Как сделать так, чтобы кнопка «Поиск» вызывала метод index перед попыткой поиска? (Я решил это, заменив @search на articles_path).

  2. Решено с помощью will_paginate, с которым у меня раньше были проблемы, но теперь он работает.


person Zach Kemp    schedule 09.03.2011    source источник


Ответы (1)


Эй, это выдержка из того, как мой сайт работал до того, как я перешел на 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 %>
person Nath    schedule 24.03.2011