2011-10-16 3 views
3

CONTAINSTABLE과 OR 구문을 결합한 순위를 얻고 싶습니다.하지만 운이 없었습니다. 기본적으로 AND/OR 기능에 대한 기능을 찾고 있습니다.SQL Server에서 CONTAINSTABLE을 사용하여 OR 구문을 '결합'순위로 지정하려면 어떻게합니까?

SELECT TOP 100 * 
FROM JobData AS FT_TBL 
INNER JOIN CONTAINSTABLE(JobData, Description, '"microsoft" OR "C#" OR "5 years" OR "winforms"') AS KEY_TBL 
    ON FT_TBL.Id = KEY_TBL.[KEY] 
ORDER BY KEY_TBL.[RANK] DESC 

그리고 내 표는 일부는 모든 키워드를 포함하는 작업 설명의 1000있다 : 예를 들어

나는 같은과 같은 쿼리를 말한다. 내가보고있는 것은 "마이크로 소프트"(또는 첫 번째 용어가 무엇이든)를 포함하는 사람들에게 가장 높은 순위를 부여한다는 것입니다. OR 용어의 결합 된 순위를 원합니다 ... 본질적으로 각 구문의 순위를 합한 것입니다.

어떻게하면됩니까? 그것은 다소 사소한 것처럼 보입니다 ...하지만 내 검색 결과에 대한 유용한 정보가 없습니다.

답변

3

CONTAINSTABLE의 능력과 관련된 기술적 세부 사항을 읽은 후에 이에 대한 답을 찾았습니다. 원래의 가정은 임의의 OR 조건 이 용어 목록에서 동일한 가중치를 부여 받았기 때문에 총 순위는 각 용어 순위의 합계였습니다. 물론 결과는이 가정과 충돌합니다. 내가 원래의 질문을하는 이유입니다.

이 문제를 해결하려면 ISABOUT을 사용하여 각 용어를 균등하게 가중치를 부여하면 각 용어의 순위를 합산하는 것과 동일한 결과가 발생합니다.

그래서 원래의 질문에 주어진 예를 들어, 내가 원하는 결과에 도달하기를 사용할 수 있습니다 :

SELECT TOP 100 * FROM JobData AS FT_TBL INNER JOIN CONTAINSTABLE(JobData, Description, 'ISABOUT("Microsoft" weight(.25), "C#" weight(.25), "5 years" weight(.25), "winforms" weight(.25))') AS KEY_TBL ON FT_TBL.Id = KEY_TBL.[KEY] ORDER BY KEY_TBL.RANK DESC 

이것은 물론 다음 더 복잡한 쿼리에 대한 다른 용어와 AND 연산 할 수있다.

본인이 원래의 질문을하는 것과 비슷한 문제를 발견하면 다른 사람에게 도움이되기를 바랍니다.

관련 문제