2013-05-24 3 views
1

Oracle Text를 사용하여 색인 된 다중 열 데이터 저장소가 있고 Contains 키워드를 사용하여 쿼리를 실행하고 있습니다.
다른 열에 다른 무게를 적용하려면 다음과 같이 진행하십시오. Oracle Text : 점수 계산을 위해 쿼리의 일부를 계산하지 않는 방법은 무엇입니까?

"끔찍한"에 대한 사용자를 검색, 오라클에 발행 된 쿼리는 다음과 같이됩니다

:

WHERE CONTAINS(indexname, 
    '((horrible WITHIN Column1) * 3) 
    OR ((horrible WITHIN Column2) * 2)) 
    AND (movie WITHIN CategoryColumn)', 1) > 1 
:

WHERE CONTAINS(indexname, 
    '((horrible WITHIN column1) * 3) 
    OR ((horrible WITHIN column2) * 2))') > 1 

뿐만 아니라 인덱싱 카테고리 필터를 추가, 나는이 작업을 수행

이 필터는 범주별로 필터링하지만 오라클 텍스트는 AND 키워드의 어느 한 쪽에서도 가장 낮은 점수를 차지하므로 점수를 완전히 망칩니다. 대신 oracle에게 내 AND의 오른쪽을 무시하도록 지시하고 싶습니다.

점수가 무시되는 쿼리의 특정 부분을 가져 오는 방법이 있습니까?

기본적으로, 나는

(horrible WITHIN Column1) * 3 
OR (horrible WITHIN Column2) * 2) 

에 따라 점수 싶지만

'((horrible WITHIN Column1) * 3) 
OR ((horrible WITHIN Column2) * 2)) 
AND (movie WITHIN CategoryColumn)' 

답변

1

에 따라 선택합니다

의 언급은 지정이 얼마나 아이의 점수 OR 및 AND 연산자의 요소를 병합해야합니다.

오라클 문서의 Alternative and User-defined Scoring 섹션에 있지만 많은 예제가 없습니다.

(작동하는 경우)이 경우에 간단 할 수도 query relaxation를 사용하여, 예를 들면 :

where CONTAINS (indexname, 
'<query> 
    <textquery lang="ENGLISH" grammar="CONTEXT"> 
    <progression> 
     <seq>(horrible WITHIN Column1) AND (movie WITHIN CategoryColumn)</seq> 
     <seq>(horrible WITHIN Column2) AND (movie WITHIN CategoryColumn)</seq> 
    </progression> 
    </textquery> 
    <score datatype="INTEGER" algorithm="COUNT"/> 
</query>')>0; 

당신이 더 편안 쿼리에서 득점으로, 가중치를 부여 할 필요가 없습니다이 방법은 절대 초과하지 이전 순서대로.

+0

주셔서 감사합니다. 가까운 시일 내에 살펴 보겠습니다. –