2014-02-21 68 views
3

我試圖在基於幾個屬性的模型上實現搜索功能。我想讓用戶能夠指定要過濾的屬性。這將是非常相似,任何電子商務網站,如Amazon.comRails:實現像Amazon.com一樣的搜索/過濾器

例如,用戶可以根據 過濾的 - 筆者 - 遊客 - 類

任何意見,將不勝感激!

回答

2

我強烈建議您使用Solr來處理您的問題,因此請考慮使用Sunspot作爲您對Solr的Ruby/Rails抽象。

你可以從文檔中看到的,你可以用這種方式定義的場面:

# 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 

太陽黑子與Rails的融合也使得自動索引在save回調對象保持Solr的索引輕鬆了許多。

1

我也有過類似的問題,但我不想使用外部服務像Solr的,或者ElasticSearch所以我建這個寶石:https://github.com/fortytools/forty_facets

+0

多少的性能沒有影響Solr的或ElasticSearch?你什麼時候看到擴展問題? – user2012677

+0

由於實際速度取決於您的模式和數據,因此很難提出一般指標。 過濾是通過非常簡單的連接和其中(...)查詢完成的。 因此,您在正常控制器方法中爲加速查詢所做的一切適用於此處 對於每個方面,都會發生一次'GROUP-BY'查詢。這些可能因成本和方面值的數量而有很大差異。 我並不認爲自己是一位數據庫專家,但只需掌握所有相關列的索引,對於具有高達100K行'基礎'實體和4-5方面的數據集,我沒有任何問題可以過濾。 –