2013-03-15 2 views
2

작성자 필드가있는 책 목록을 가정하십시오. 저자 필드에서 어떤면이 있을지 모르지만 "Stephen King"과 "Richard Bachman"같은 값을 취급합니까? 그래서 이러한 결과 :두 개의 패싯을 동일한 값으로 처리하십시오.

  • 헤밍웨이 : 8
  • 스티븐 킹 : 10
  • 에드가 앨런 포 : 20
  • 스티븐 킹 :

    : 5

가 표시된다

  • 헴밍 웨이 : 8
  • 스티븐 킹 : 15
  • 에드가 앨런 포 :면 제목은 "스티븐 킹"의 경우 중요하지 않은 것을 20

주, "스티븐 킹", 또는 뭔가 다른. 그것들은 함께 만나는 것이 중요합니다.

쿼리 시간 솔루션이 필요합니다. 불행하게도 스키마는이 인덱스에 대해 변경할 수 없으며 범용 인덱스이며 모든 사용자가 자신의 스키마를 "비틀 수 있도록"만들면 손에서 벗어날 수 있습니다.

+0

불행하게도, 당신은 당신이 스키마를 수정할 수없이 직접 SOLR에서 원하는 기능을 얻을 수 없습니다. –

답변

3

패싯 필드를 패싯 쿼리와 결합하여이를 달성 할 수 있습니다.

쿼리에 이러한 추가 : 다음과 같이 표시됩니다 돌려

&facet=true 
&facet.field=author 
&facet.query=author:("Hemmingway" OR "Stephen King") 

패싯을 :

facet_counts: { 
    facet_queries: { 
     "author:("Hemmingway" OR "Stephen King")" : 18 
    } 
    facet_fields: { 
     author: { 
      "Hemmingway"  : 8, 
      "Stephen King" : 10, 
      "Edgar Allan Poe" : 20, 
      "Richard Bachman" : 5 
     } 
    } 
} 

또한면 쿼리에 '별칭'을 추가 할 수 있습니다. 당신이 모두 출력 필드 (facet_queries 및 facet_fields)에서 병합 할 수있는 경우

facet_queries: { 
     "Hemmingway" : 18 
    } 

잘 모르겠어요 :이

&facet.query=author:("Hemmingway" OR "Stephen King") 

&facet.query={!ex=dt key="Hemmingway"}author:("Hemmingway" OR "Stephen King") 

하고 패싯 쿼리 출력이됩니다 변경 솔라.하지만 모든 고객으로부터 그렇게하는 것은 솔직해야합니다.

+0

큰 요청의 경우 facet 쿼리 당 maxBooleanClauses 매개 변수 (기본적으로 1024)와 headerBufferSize (4k)에 의해 제한됩니다. –

1

문자열을 변환하는 분석 체인이 필요합니다. 쿼리 시간에 인덱스 시간 에 적용하면 SynonymFilter가이를 수행 할 것이라고 생각합니다. sysnonym 매핑이 한 방향으로 만 진행되는지 확인해야합니다.

+0

마이크 감사합니다. 불행하게도 스키마는이 인덱스에 대해 변경할 수 없으며 범용 인덱스이며 모든 사용자가 자신의 스키마를 "비틀 수 있도록"만들면 손에서 벗어날 수 있습니다. – dotancohen

1

당신은 패싯의 전체 목록을 필요로하지 않는다고 가정합니다. 상위 n 명의 작성자입니다. 이 경우 사후 처리 단계에서 수행 할 수 있습니다.

당신은 동의어를 알고 약간 더 높은 facet.limit (2 * n이라고 가정 해 봅시다)을 입력하면 결과 집합에서 동의어를 필터링하면됩니다. < n 결과로 끝나면 이전 단계를 반복하십시오 (최악의 경우 동의어의 수에 따라 하나 이상의 요청을 수행해야합니다).예에서

... &facet=true&facet.field=author&facet.limit=100&facet.mincount=1

이 사람은 SOLR와는 아무 상관이없는,하지만 그냥 잘라 수있는 모든 제한을 고려.

안부,

+0

포인트를 보내 주셔서 감사합니다! –