如何在SQL Server中使用CONTAINSTABLE获得OR短语的“组合”排名?

时间:2011-10-16 05:51:02

标签: sql sql-server tsql

我想通过CONTAINSTABLE获得OR短语的“组合”排名,但没有任何运气。基本上我正在寻求AND / 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术语进行综合排名......基本上是每个短语的总和。

我怎样才能做到这一点?好像它应该是相当微不足道的......但是我的搜索没有提供有关此事的有用信息。

2 个答案:

答案 0 :(得分: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

这当然可以与其他术语进行“与”运算以进行更复杂的查询。

希望这可以帮助其他人,如果他们发现自己遇到类似的问题而导致我问原问题。

答案 1 :(得分:0)

我想也许这个问题和答案可以在这里回答你的问题。 how to write containstable searchcondition with and's and or's