2012-10-16 1 views
4

기본적으로 Solr은 필드에 패싯을 반환하고 해당 필드에 대한 패싯 값을 선택하면 이전의 모든 선택 항목이 해당 필드에 대한 패싯의 일부로 더 이상 반환되지 않습니다.Solr을 사용하여 필드 당 여러 패싯

저는 Amazon의 검색 엔진 (자신의 A9 검색 엔진을 기반으로하므로 Amazon CloudSearch와 유사)과 비슷한 방식으로 작동하는 검색 엔진을 개발하려고합니다.

Amazon 검색에서 "패싯"으로 범위를 좁히면 검색에 해당 영역을 추가하는 경우 다른 옵션과 함께 카운트가 계속 표시됩니다.

Solr에서이 작업을 수행 할 수있는 기본 제공 방법이 있습니까? 그렇지 않다면 어떻게 내 자신을 굴릴 수 있습니까? 분명히 필드에 대해 반환 된 원래 패싯을 캐시해야합니다. 그러나 이미 필드에 대해 하나 이상의 (또는 그 이상) 패싯을 선택한 후에는 다른 패싯 영역의 계수를 계산하는 가장 효율적인 방법은 무엇입니까? 분명히 추가 패싯을 선택하면 두 값 중 하나를 사용하여 사물을 표시하려고 할 때 해당 값 사이에서 "OR"쿼리를 수행합니다.

예를 들어, 아마존의 보석 부서에서 다이아몬드 반지를 검색 한 다음 금속 유형으로 Gold로 축소했습니다.

Example Amazon faceting

누군가가 내가 (효율적)이 SOLR와 함께 할 수있는 방법에 대한 예를 제공 할 수 있습니다 : 그때 여러 캐럿 측면을 선택할 수 있었다?

그리고 Solr의 향후 버전 (상자에없는 것으로 가정)에서이 기능을 제공 할 수있는 기능이 있습니까?

+0

[이 답변] (http://stackoverflow.com/a/18492357/2697658)에서 가져온 것입니다. – juan

답변

7

Tagging and excluding Filters Solr의 기능이 찾고있는 기능 일 수 있습니다. 위키 링크는 Multi Select Faceting입니다.

예 :는 : ../solr/select/?q=* & 행 = 0 &면 = & FQ = 캐럿에 {태그 = KRT!}! 10k_Gold & facet.field = {예 = KRT } KARAT

이 기능은 Solr 1.4 이후로 제공됩니다.

+1

고마워,이게 효과가있을 것 같아! –

+0

+1 정말 도움이되었습니다. 1.4에서 SolrQuery로 어떻게 할 수 있습니까? setFacetField()와 비슷한 것? – manurajhada

+0

필터 된 검색어와 검색어 검색어가 여러 개인 경우 필드에 태그를 추가하려면 어떻게해야합니까? 내 필터 쿼리는 'fq = {! terms = country_facet} uk, germany'입니다. – ranjan

3

Solr의 새 JSON Facet API로 다중 선택 패싯이 조금 다르게 작동합니다. 필터에도 동일한 방식으로 태그를 지정하지만 다른 제외 구문이 있습니다.

&q="running shorts" 
&fq={!tag=COLOR}color:(Blue Black) 
&json.facet={ 
     sizes:{type:terms, field:size}, 
     colors:{type:terms, field:color, domain:{excludeTags:COLOR} }, 
     brands:{type:terms, field:brand, domain:{excludeTags:BRAND} } 
} 

파란색 또는 검은 색 항목을 선택하는 필터에주의 태그 = 색. 색상을 사용하는 경우 해당 태그가있는 필터를 무시 (또는 제외)하여 나머지 색상 수를 다시 가져 오려고합니다. 그 도메인은 {excludeTags : COLOR}입니다.

이 예제는 제목을 기준으로이 질문을 찾는 사람들을 도울 수 http://yonik.com/multi-select-faceting/