2013-05-10 1 views
4

주어진 다음의 예 SOLR 문서에 필터링 :SOLR : 다중 값 필드에 OR 쿼리 일치의 수

<doc> 
    <field name="guid">1</field> 
    <field name="name">Harry Potter</field> 
    <field name="friends">ron</field> 
    <field name="friends">hermione</field> 
    <field name="friends">ginny</field> 
    <field name="friends">dumbledore</field> 
</doc> 
<doc> 
    <field name="guid">2</field> 
    <field name="name">Ron Weasley</field> 
    <field name="friends">harry</field> 
    <field name="friends">hermione</field> 
    <field name="friends">lavender</field> 
</doc> 
<doc> 
    <field name="guid">3</field> 
    <field name="name">Hermione Granger</field> 
    <field name="friends">harry</field> 
    <field name="friends">ron</field> 
    <field name="friends">ginny</field> 
    <field name="friends">dumbledore</field> 
</doc> 

다음과 같은 쿼리 (또는 필터 쿼리) :

friends:ron OR friends:hermione OR friends:ginny OR friends:dumbledore 

3 개의 문서 모두는 지정된 친구 중 적어도 한 명 이상을 가지고 있기 때문에 반환됩니다.

그러나 일치하는 친구 수에 대한 최소 (최대) 임계 값을 설정하고 싶습니다. 예를 들어 지정된 친구 중 2 명 이상 3 명 이하의 문서 만 반환하십시오.

는 첫 번째 (해리 포터) 4 일치하고 두 번째 (론 위즐리) 동안 만 세 번째 문서 (헤르미온느 그레인저)을 그녀가 지정된 네 친구의 3을 가지고로 반환하는 쿼리는 1

일치

Solr 쿼리에서 이것이 가능합니까?

답변

6

function query, termfreq을 사용하고 일치하는 용어 (일명 '친구')를 계산합니다. 각 친구를 찾을 수에 대한

{!frange l=2 u=3}sum(termfreq(friends,'ron'),termfreq(friends,'hermione'),termfreq(friends,'ginny'),termfreq(friends,'dumbledore')) 

termfreq(...)1를 반환하고, 이들의 합은 당신이 (당신의 임계 값에 대해 테스트 것입니다 : 당신은 결과를 요약 할 수 있습니다 만 다음과 같이 frange를 사용하여 임계 값 내에 문서를 반환 !frange 문 시작 부분에 지정한 하한선과 상한선).

q: 필드 또는 fq: 필드에이 값을 입력 할 수 있습니다. 여기에서는 참조 용 SOLR 관리 패널에 있습니다 답장을

enter image description here

+0

정확히 내가 무엇을 찾고 있었습니까. 감사! – jiffybank

+0

'termfreq' fq에서 와일드 카드를 사용하는 방법을 알고 있습니까? 그래서 당신은 "manager", "Manage", "Management"와 일치시키기 위해'termfreq (text, manage *)'를 사용할 수 있습니까? –

0

내가 볼 수있는 가장 쉬운 방법은 'nbOfFriends'필드를 추가하고 소스 또는 UpdateProcessor에 채우는 것입니다.

이 추가 필드를 추가하지 않으려면 Joins을 볼 수는 있지만 가입시 자식 수를 쿼리 할 수 ​​있는지 확실하지 않은지 확인하십시오.

+0

감사합니다. 불행히도 전체 친구 수만큼 쉽지는 않습니다. 쿼리에 지정된 것과 일치하는 친구의 수가 필요합니다. 이는 동적입니다. 또한 조인이 어떻게 도움이되는지 즉시 알 수는 없습니다. – jiffybank

관련 문제