2016-06-01 3 views
1

solr에서 동적 필드를 사용하는 필터 시스템을 개발하려고합니다. 이 동적 필드는 제품마다 다를 수 있으며 접두사가 attribute_filter_이므로 필터 필드를 인식하는 데 도움이됩니다. 따라서 검색 쿼리가 주어지면이 동적 필드를 기반으로 패싯 처리 된 결과를 얻고 싶습니다. 내 검색 쿼리가 문서 1 doc2, 내가 원하는 일치하는 경우에만 색상, 브랜드 및 카테고리 등면 필드입니다 attribute_filter_color, attribute_filter_brand 및 필터 때솔리드의 패싯으로 동적 필드

예를 들어, 나는 solr

{ID:1, attribute_filter_color:"white", attribute_filter_brand:"Dell"} 
{ID:2, attribute_filter_color:"red", attribute_filter_category:"electronics"} 
{ID:3, attribute_filter_size:"mobiles", attribute_filter_brand:"samsung"} 

에 문서 등의 3 개 제품을 attribute_filter_category. 내 검색 쿼리가 문서 2 doc3 일치하면

, 나는 필터 색상, 크기, 카테고리 및 브랜드 등면 필드 attribute_filter_color, attribute_filter_size, attribute_filter_categoryattribute_filter_brand 있습니다합니다.

내 검색어가 doc1 및 doc3과 일치 할 때 필터 색상, 브랜드 및 크기가 필요하므로 패싯 필드는 attribute_filter_color, attribute_filter_brandattribute_filter_size입니다.

또한이 필터는 10 개 이상 ~ 300 개 제품 일 수 있습니다. 이로 인해 GET URL의 한계를 초과 할 수있는 300 개의 패싯 필드가있는 GET URL을 만드는 또 다른 문제가 발생합니다.

jira ticket은이 상황에서 정규 표현식이 어떻게 도움이되었는지 보여줍니다.

+0

Solr은 GET 인수 길이 문제를 피하기 위해 모든 매개 변수를 POST 데이터로 제공합니다 (대부분의 클라이언트는 기본적으로 POST를 사용합니다). – MatsLindh

답변

0

제 해결책은 필드 이름을 추가 필드로 인덱싱하여 필드가 들어있는 문서도 "facet_fields": ["attribute_filter_color","attribute_filter_brand"]이되도록하는 것입니다.

문서 결과 세트 전체에 패싯을 생성 한 다음 새 쿼리에서 그 결과를 사용하여 관심있는 필드 전체에서 패싯을 생성합니다. 추가 쿼리가되지만 적절하게 조정해야합니다. 비용이 많이 드는 부분은 어쨌든 패싱하고있는 다른 필드의 수가 더 많습니다. facet_fields 필드는 신속하게 계산되어 반환됩니다.