2014-02-21 2 views
3

Я пытаюсь реализовать функцию поиска на модели, основанной на нескольких атрибутах. Я хочу, чтобы пользователь мог указать, какие атрибуты необходимо фильтровать. Было бы очень похож на любой сайт электронной коммерции, таких как Amazon.comRails: выполнить поиск/фильтр как Amazon.com

Например, пользователь может фильтровать на основе - автор - рейтинг - категория

любой совет будет высоко ценится!

ответ

2

Я осуществил поиск до и у меня есть большой удачи с этим

http://railscasts.com/episodes/111-advanced-search-form-revised

Это нужно преимущество экономии поиски, b e в своей собственной модели, чтобы не пометить другую модель и легко реализовать без каких-либо драгоценных камней.

2

Я бы рекомендовал использовать Solr для обработки вашей огранки для вас, поэтому рассмотрите возможность использования Sunspot в качестве аббревиатуры Ruby/Rails над Solr.

Как вы можете видеть из документации, вы можете определить поля граней таким образом: интеграция

# Posts that match 'pizza' returning counts for each :author_id 
search = Post.search do 
    fulltext "pizza" 
    facet :author_id 
end 

search.facet(:author_id).rows.each do |facet| 
    puts "Author #{facet.value} has #{facet.count} pizza posts!" 
end 

SunSpot с Rails также делает поддержание индекса Solr намного проще путем автоматического индексирования объектов в save обратных вызовов.

1

У меня была аналогичная проблема, но я не хочу использовать внешнюю службу, как Solr или ElasticSearch, так что я построил этот перл: https://github.com/fortytools/forty_facets

+0

Сколько производительность пострадавших без Solr или ElasticSearch? Когда вы видите проблемы масштабирования? – user2012677

+0

Трудно придумать общие показатели, поскольку фактическая скорость зависит от вашей схемы и ваших данных. Фильтрация выполняется через довольно прямое соединение и где (...) запросы. Итак, все, что вы делаете в своих обычных методах контроллера для ускорения запросов, здесь применимо к . Для каждого графа происходит один запрос «GROUP-BY». Они могут сильно различаться по стоимости в зависимости от количества граней и значений фасетов. Я не считаю себя экспертом по БД, но с только пошатнувшимися индексами во всех соответствующих столбцах у меня не было проблем с фильтрацией на наборах данных с до 100 К строк «базовых» объектов и 4-5 граней. –

Смежные вопросы