2014-02-21 1 views
3

여러 속성을 기반으로하는 모델에 검색 기능을 구현하려고합니다. 사용자가 필터링 할 속성을 지정할 수있게하고 싶습니다. 카테고리레일 : Amazon.com과 같은 검색/필터 구현

어떤 조언을 많이 주시면 감사하겠습니다 - 평가 - 저자 - 여기에는

예를 들어, 사용자가 을 기준으로 필터링 할 수 있습니다 Amazon.com

으로 모든 전자 상거래 사이트와 매우 유사하다!

답변

2

패셔닝을 처리하려면 Solr을 사용하는 것이 좋습니다. 따라서 Solr보다 Ruby/Rails 추상화로 Sunspot을 사용하는 것이 좋습니다. 당신이 문서에서 볼 수 있듯이

,이 방식으로 필드면을 정의 할 수 있습니다 : 레일과

# 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 

태양 흑점의 통합은 자동으로 save 콜백에서 개체를 인덱싱하여 많은 쉽게 SOLR 인덱스를 유지한다.

1

나는 비슷한 문제를 했어,하지만 난 SOLR 같은 외부 서비스를 사용하지 않았거나 ElasticSearch 그래서 나는이 보석 내장 : SOLR 또는 ElasticSearch없이 https://github.com/fortytools/forty_facets

+0

얼마나 성능이 영향을? 스케일링 문제는 언제 볼 수 있습니까? – user2012677

+0

실제 속도는 스키마와 데이터에 따라 다르므로 일반 메트릭을 찾기가 어렵습니다. 필터링은 예쁜 직선 조인과 (...) 쿼리를 통해 수행됩니다. 쿼리 속도를 높이기 위해 일반적인 컨트롤러 메서드에서 수행하는 작업은 여기 에 적용됩니다. 각 패싯에 대해 'GROUP-BY'쿼리가 발생합니다. 이들은면 수와면 값에 따라 비용이 크게 다를 수 있습니다. DB 전문가라고 생각하지 않지만 모든 관련 칼럼에 색인을 두드리는 것만으로도 최대 100,000 행의 '기본'엔터티와 4-5 패싯으로 데이터 집합을 필터링하는 데 문제가 없었습니다. –