2014-11-28 1 views
0

지식베이스 용 Solr 색인을 작성 중이며 을 구현하는 데 문제가 있습니다. 우선 : 우리는 곱셈 부스팅과 덧셈을 원합니다.기능이있는 경우 Solr에서 범위를 확인해야합니다.

그리고 문서가 더 많을수록 더 많이 올려야하지만 특정 정도는 높아집니다. 먼저 boost = sum (div (hits, 10000), 1)과 같은 함수에 대해 살펴 보았지만 특정 문서를 너무 많이 푸시합니다.

그래서 우리는이 같은 생각 (일부 다른 사람 옆에 있지만, 모든 작업과 만이 나에게 오류를 줄) :

&boost=if(hits,[0+TO+100],1) 
&boost=if(hits,[101+TO+250],1.25) 
&boost=if(hits,[250+TO+100000],1.5) 

오류는 다음과 같습니다 그래서 명백한

org.apache.solr.search.SyntaxError: Expected identifier at pos 8 str='if(hits,[101 TO 250],1.25)' 

이유는 if 함수의 범위입니다. 단일 값으로 제거하면 모든 것이 작동하지만 실제로는 도움이되지 않습니다.

제 질문은 : "if()"함수와 값의 범위를 결합하여 일치시킬 수 있습니까? 이 문제를 해결하기 위해 수 백만 가지 방법을 시도해 볼 수는 있지만 사실상 boost 패러미터 값을 다른 범위에 맞게 구성 할 수 있고 그 구문을 사용하기가 쉽기 때문에 실제로 이와 같은 방식으로 사용하면 좋을 것입니다. 우리의 프레임 워크는 Solr에 액세스합니다.

그러나 달리기를 할 기회가 없다면 다른 대안을 찾을 수 있습니다. 많은,

마르쿠스

답변

0

는 여기를 청소 : 을 경우 내에서 범위를 사용할 수 없습니다 기능.

하지만 우리는 거의 우리가 달성하기 위해 원하는 것을 수행하는지도 기능을하는 방법을 발견하는 경우 범위 시도 : 첨가제를 작동 불행하게도

&boost=map(hits, 0, 100, 1, map(hits,101, 250, 1.25, map(hits,250, 10000, 1.5))) 
0

당신은 다음과 같은 bq (Boost Query)을 사용할 수 있습니다

감사 :

그래서
&bq=hits:[0 TO 100]^1.0 
+0

네,하지만 ... – mindfxxxedCoder