2012-05-21 3 views
5

태그가 지정된 콘텐츠의 데이터베이스에 대해 실행해야하는 SOLR 검색에 대해 상당히 복잡한 요구 사항이 있습니다. 먼저 필터 태그와 일치하는 결과로 데이터베이스를 필터링해야합니다. 차단 목록의 태그가있는 결과는 허용 목록의 태그가 포함되어 있지 않으면 제거해야합니다.NOT 및 OR을 포함한 복잡한 SOLR 쿼리

"숲"또는 "보존"이라는 태그가있는 모든 문서를 검색한다고 가정 해 봅시다. 그러나 "africa"또는 "asia"라고 태그가 지정되지 않은 경우 "uk"또는 "europe"태그가 붙은 문서는 제외하고 싶습니다. 내 SOLR 쿼리에 이것을 작성하려고 시도했습니다.

tag:((forest OR conservation) AND (africa OR asia OR !uk OR !europe)) 

로직이 나에게 들리지만 쿼리가 작동하지 않습니다. 나는 "forest"또는 "conservation"이라는 태그가 붙은 46 개의 문서가 있는데 그 중 하나는 "asia"로 태그가 지정되고 "uk"또는 "europe"로 태그가 지정되지 않은 쿼리는 결과를 반환하지 않습니다.

SOLR에 대한 fq (필터링 된 쿼리) 매개 변수에 대한 정보가 유용 할 것 같았습니다. 그러나 이것은 도움이되지 않았다. SOLR이 고장 나게하는 것은 NOT과 OR의 조합 인 것 같습니다.

내가 할 수있는 일이 가능합니까? 내 논리가 어딘가에 결함이 있습니까? 이것은 SOLR 1.4 btw에 있습니다 - 이것은 어딘가에서 해결 된 문제입니다 ...

어떤 조언을 해 주셔서 감사합니다!

+0

를 시도? –

+0

아니요 - 1.4였습니다! 업그레이드 된 이후로 ... – vitch

+0

오, 가난한 사람. : –

답변

8

오른쪽하지만, SOLR 4.1

tag:((forest OR conservation) AND (africa OR asia OR (*:* AND !uk AND !europe))) 
+1

고마워요 - 왜 그러시죠? 이유에 대해 좀 더 설명해 주시겠습니까? 네가 부정적인 반응을 보이기 위해서는 ( – vitch

+0

) 정확히 일치하는'(* : *)'이 필요합니다. – Persimmonium