2012-04-08 8 views
1

내가 팔고있는 가게에서 의류를 판매하고 있습니다. 의류의 각 항목은 여러 가지 종류가 있습니다. 예를 들어 셔츠 A가 들어있을 수 있습니다 : 빨간색 대형, 빨간색 중간, 파란색 대형, 파란색 중간, 흰색 대형 및 흰색 중간.Solr Search Facets : 제품 수를 어떻게 계산합니까?

처음에는 각 종류를 solr doc로 추가했습니다. 그래서 위의 제품에 대해 각각 6 개의 solr 문서를 추가했으며 각각은 동일한 제품 ID를가집니다. 제품 ID별로 결과를 그룹화하여 모든 것을 완벽하게 처리했습니다.

그러나 패싯 계수는 모든 품종 수가 아니고 제품 계수가 아닙니다. 예를 들어 위의 한 제품으로 제한하는 경우 (시스템의 유일한 제품이라고했을 때) :면 개수는 다음과 같이 표시됩니다.

빨강 (2) 파랑 (2) 흰색 2)

어느 것이 옳았는가, 각 색상에 대해 2 개의 문서가 추가되었습니다. 하지만 실제로 내가보고 싶은 것은 이것이다 :

레드 (1) 블루 (1) 흰색 (1)

각 색상 만 한 제품이있다.

그래서 이제는 각 solr 문서를 제품으로 만들 필요가 있다고 생각합니다.

그런 경우 제품을 추가하고 "color"필드를 세 번 추가하십시오. 빨강, 파랑, 흰색 중 하나 흰색을 입력하고 필드 크기를 세 번 더 추가하십시오. 그러나 이제 solr은 각 색상별로 어떤 크기가되는지 알지 못합니다. 어쩌면 나는 작은 것에서 만 흰색을 가질 수 있습니다.

패싯 계수를 올바르게 계산하려면 올바른 방법은 무엇입니까?

답변

7

내가 특별히 여기 (필드가 붕괴) 쿼리

group=true 
group.field=product_id" 
group.limit=100 
group.facet=true 
group.ngroups=true 

group.facet에 추가 이러한 매개 변수를

http://wiki.apache.org/solr/FieldCollapsing#Request_Parameters

을 사용하여이 그룹을 할 수있는 알고 보니 정말 할 사람이다 패싯은 내가 원하는 것처럼 그룹과 함께 일합니다.

+0

은 매력처럼 작동합니다. 공유를위한 고맙습니다! – kieste

1

두 가지 옵션이 있다고 생각합니다.

옵션 1 : 패싯 값 (주어진 예에서 적색, 청색 & 흰색)의 목록을 일단

는 다음 필터로 각 패싯 값을 다시 원래 쿼리를 발생. 예를 들어 원래 쿼리가 q=xyz&group.field=ProductID 인 경우 q=xyz&group.field=ProductID&group.ngroups=true&fq=color:Red을 실행합니다. 응답의 ngroups 값은 빨간색에 대해 필요한 수를 제공합니다. 마찬가지로 파란색과 흰색에 대한 별도의 쿼리를 실행합니다.

옵션 2 :

는 제품 ID와 색상을 모두 포함 Product_Color라는 별도의 필드를 만듭니다. 예를 들어 제품 ID가 ABC123이고 색이 Red 인 경우 Product_ColorABC123_Red입니다. 이제 색상면을 얻으려면 ProductID 대신 Product_Color을 그룹화 한 별도의 쿼리를 실행하고 올바른 값으로 필요한 패싯을 가져옵니다. Remeber가이 작업을 수행하려면 group.truncate=true으로 설정하십시오.

0

당신은 Facet Pivot을 조사 할 수 있습니다. 그러면 정확한 수와 필터링으로 단일 문서, 트리 모양면을 가질 수 있습니다.

관련 문제