Мышление Sphinx Примеры реализации граненого поиска? - PullRequest
2 голосов
/ 09 марта 2011

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

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

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

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

Решено:

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

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

1 Ответ

3 голосов
/ 24 марта 2011

Эй, это выдержка из того, как мой сайт работал до того, как я перешел на 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 %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...