2016-06-01 3 views
0

Postgres를 백엔드로 사용하고 Ruby on Rails를 프런트 엔드로 사용하여면 검색/필터 UI를 구현하는 가장 좋은 방법은 무엇입니까? 이 예는 다음과 같습니다 :Postgres & Rails를 사용한면 필터링

faceted filtering example

+1

''pg_search' 젬을보세요. https://github.com/Casecommons/pg_search – lcguida

답변

1

ThinkingSphinx 또는 Apache Solr을 사용하십시오. 둘 다 내장 패싯이 있습니다. 자신 만의 롤백을 할 수 있지만 다른 경험에 따르면 실제 검색 엔진을 추가하고 거기에있는 패싯 기능과 다른 검색 기능을 이용하는 것이 좋습니다. 나는 Solr을 모든 새로운 개발에 사용하지만, ThinkingSphinx는 일반적으로 설치가 좀 더 쉽고 좋은 경쟁자가되는 새로운 기능 (주된 하나는 연속적인 색인 생성)이 있습니다.

+0

나는 다른 프로젝트에서 ElasticSearch를 사용해 왔지만 이것으로 좋았지 만 동일한 리소스가 없으므로 DB 또는 레일스에서 ​​직접 수행 할 수 있어야합니다. – Avishai

+0

나는 Michael에 동의한다.이 솔루션은 훨씬 더 깨끗하다. 그러나 약간의 레코드로 작은 응용 프로그램을 실행하는 경우 약간 과용됩니다. – basgys

0

내가 레일 위의 그림처럼 단순한 형태의 필터를 구현할 수있을만큼 강력하다 생각합니다.

좋은 데이터 모델이 필요하다면 파이처럼 쉽게 사용할 수 있습니다.

예 : 당신이 simple_form을 사용할 수 있지만

E/R example

는 양식 작성을 단순화하기 위해,하지만 확실히 선택 사항입니다.

+0

이것은 좋은 예입니다. {Blue : 50, Red : 25, Black : 182}, 크기 : {Compact : 75, Midsize : 122} 등 색상과 같은 Postgres에서 패싯 결과 수를 얻으려면 어떻게해야합니까? – Avishai

+1

색상을 선택하고, 자동차를 타고 색상별로 그룹화 할 수 있습니다. 크기에 대해서도 마찬가지입니다. – basgys

0
select 
    (
     select json_object_agg(COALESCE(brand_id, 'null'), cnt) 
     from (
      select brand_id, COUNT(*) as cnt 
      from unnest(array_agg(brand_id)) as tmp(brand_id) 
      group by brand_id 
     ) ttt 
    ), 
    min(price) as price_min, 
    max(price) as price_max 
from product 
WHERE is_visible = true 
+0

SQL이 좋게 보일 때,이 질문에 대한 원래 질문에 대한 대답은 아닌 것 같습니다. "UI를 통해이를 수행하는 방법 Postgres 백엔드 및 RoR 프런트 엔드 ". 더 완벽한 대답은 "답변에있는 것과 비슷한 쿼리를 실행하는 페이지 매김 된 API 끝점 호출"입니다. – MSC