2014-08-27 5 views
2

그래서 나는 다음과 같은 FQ 필터 PARAM와 SOLR 쿼리가 있습니다 따라서분할 SOLR FQ 필터 쿼리

<maxBooleanClauses>1024</maxBooleanClauses> 

나는 선택의 여지가 있지만,에가 없습니다 :

(field_name:(1 OR 2 OR 25 OR 33 OR 333 OR 32 OR ...... and 2000 other ORS)) 

그래서 SOLR이 최대 부울 제한이 이 쿼리를 분할하고 분할 된 쿼리의 결과를 결합하려고 시도하십시오. 또한 나는 매치 결과의 첫 번째 10 개의 문서와 모든 결과의 총 개수에만 관심이 있으므로 결과의 매김을 설정하고 있습니다.

검색 개체가 field_name 특성과 일대일로 많은 관계가 있습니다. 그러므로 solr 문서는 여러 개의 field_name 값을 가질 수 있습니다 .... 원래의 쿼리에서 SOLR OR 문을 사용하면이 모든 작업을 멋지게 해결할 수 있습니다. 그러나 OR을 분리 한 다음 3 개의 개별 쿼리를 실행하면 일대 다 관계에서 특정 문서는 여러 쿼리에 의해 반환됩니다. 따라서 각 쿼리에 대해 numResult를 추가하여 실제 집계 numResult를 가져올 수없고 반환 된 문서가 여러 쿼리에서 반환되는 경우가 많습니다.

어떻게이 딜레마를 해결할 수 있습니까? 이 결과를 3 개의 개별 쿼리로 분할 한 후 원래의 분할되지 않은 쿼리와 동일한 결과 (같은 총 numresult를 반환 함)

+1

'maxBooleanClauses'를 늘리지 않는 이유는 무엇입니까? 또한 데이터가 서버를 통과하도록 POST 요청을 사용하십시오. – arun

+0

http://stackoverflow.com/questions/16201195/is-there-a-size-or-term-limit-for-a-solr-query-string-when-using-http- post – arun

답변

3

간단한 해결책 중 하나는 schema.xml을 편집하고 maxBooleanClauses을 증가시키는 것입니다. 어떤 이유로 당신이 maxBooleanClauses을 증가하지 않으려면

<maxBooleanClauses>4096</maxBooleanClauses> 

, 당신은 더 적은 조항 단일 쿼리를 생성하는 하나의 절에 용어 그룹에 가입하실 수 있습니다. SOLR 어쨌든 기본적으로 OR을 사용하기 때문에

1 OR 2 OR 3 OR 4 OR 5 OR 6 OR 7 OR 8 OR 9 

먼저, OR의를 제거 할 수 있습니다

예를 들어, 당신의 maxBooleanClauses 4. 동일은 또한 다음과 같은 쿼리가 있다고 가정 가정하자. 쿼리가로 수정되도록 둘째, 하나의 조항으로 세 개의 연속적인 용어의 각 삼중 결합 :

(1 2 3) (4 5 6) (7 8 9) 

원래 필터 쿼리하면 수정 하나에 해당합니다. x - 긴 쿼리를 동등한 (기껏해야) y-long으로 변환하려면 ceil(x/y) 그룹의 조건에 참여하십시오.