2012-10-18 3 views
8

나는 내 문제를 해결하기 위해 몇 시간을 보냈다. 나는 사람들이 내가 성취하려고 노력하는 것에 가까운 질문을하는 것을 보았다. 그러나 지금까지 아무도 같은 질문을하지 않는 것 같다. 이걸 적절하게 설명 할 수 있는지 알아 보겠습니다.Solr의 필터 관련없는 패싯

나는 신발 가게입니다. 내 웹 사이트에는 세 개의 페이지가 있습니다. 하나는 남성용 신발, 하나는 여성용 신발, 다른 하나는 어린이 신발입니다. 신발 테이블에 prod_group 필드가 있다고 가정 해 봅시다. 따라서 남성 페이지의 경우 쿼리는 q = prod_group : men이됩니다. 이제 제가 제공하고자하는 측면 중 하나가 브랜드라고합시다. q = prod_group : men & filter.field = brand

내가 겪고있는 문제는 패싯 결과가 남성 신발과 관련된 브랜드뿐만 아니라 데이터베이스의 모든 브랜드를 보여주고 있다는 것입니다. 즉, "My Little Pony"라인에 남성용 신발이 없다는 것을 이미 알고 있습니다. 브랜드 패싯에 My Little Pony를 표시하고 싶지 않습니다. facet.mincount를 설정하는 것은 내가 필요로하는 것이 아닙니다. 질문을 실행하면 q = prod_group : men & fq = color : red & filter.field = brand, 고객은 브랜드 "Mighty Joe"에 빨간색 구두가 없다는 사실을 보여주기를 원하므로 패싯이 필요합니다. 0의 패싯 카운트 0

기본적으로 기본 쿼리의 결과를 기반으로 패싯 결과가 기대됩니다. 지금까지이 작업을 수행하는 유일한 방법은 두 개의 쿼리를 실행하는 것입니다. 먼저 기본 쿼리 만 사용하고 facet.mincount를 1로 설정하여 관련 패싯 목록을 얻은 다음 facet.mincount를 사용하여 실제 쿼리를 다시 0으로 설정합니다. 이미 만들어진 패싯 선택에 따라 더 이상 사용할 수없는 특정 옵션을 회색으로 표시해야하는 경우를 파악할 수 있습니다.

두 개의 쿼리를 실행하면 다소 우아 해 보입니다. facet.pivot은 장기적으로 도움이 될 수 있지만 여전히 3.x를 사용하고 있으며 곧 변경 될 것으로 보지 않습니다. 하나의 쿼리로 필요한 것을 수행 할 쿼리/스키마/구성 옵션을 놓친 적이 있습니까?

답변

0

facet.query 옵션을 보았습니까? 설명에서 그것은 당신이 필요로하는 것을 성취하는 것처럼 들립니다.

이 매개 변수를 사용하면 Lucene 기본 구문에서 임의의 쿼리를 지정하여 패싯 개수를 생성 할 수 있습니다. 기본적으로 패싯은 "필드"에 대한 고유 용어의 수를 반환하지만 facet.query는 임의의 용어 나 표현식에 대한 개수를 결정할 수 있습니다.

2

적용된 필터와 관계없이 패싯을 반환 할 수있는 Facet Excluding Filters 옵션을 확인할 수 있습니다.


남성의 경우 fq=prod_group:men을 facet.mincount 1로 필터링하면이 필터에 적용 할 수있는 모든 브랜드 패싯이 반환됩니다.
어떤 색상으로 필터를 서브 fq=color:red으로하면 결과가있는 패싯과 제외 필터를 사용하는 필터가없는 패싯을 다시 얻을 수 있습니다.
fq={!tag=dt}color:red&facet.field={!ex=dt key=nonfilter_brand}brand&facet.field=brand

이렇게하면 클라이언트 측의 차이점을 회색화하는 데 사용할 수있는 필터가 있거나없는 패싯 모두를 얻을 수 있습니다. 클라이언트 쪽에서 약간의 오버 헤드가 있지만 단 하나의 쿼리 만 수행하면됩니다.

0
fq=prod_group:men 

q 매개 변수와 경우가 아니라도 패싯 결과에 적용 할 수있는 필터링을합니다.