我想通过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术语进行综合排名......基本上是每个短语的总和。
我怎样才能做到这一点?好像它应该是相当微不足道的......但是我的搜索没有提供有关此事的有用信息。
答案 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