我想用 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 多个职位描述,其中一些包含所有关键字。我看到的是它给那些包含“microsoft”(或第一个词是什么)的人排名最高。我想对 OR 术语进行综合排名...本质上是每个短语排名的总和。
我怎样才能做到这一点?这似乎应该是相当微不足道的......但我的搜索没有产生任何关于此事的有用信息。
最佳答案
在阅读了有关 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
对于更复杂的查询,这当然可以与其他术语进行“与”运算。
希望这可以帮助其他人,如果他们发现自己遇到与导致我提出原始问题的问题类似的问题。
关于sql - 如何在 SQL Server 中使用 CONTAINSTABLE 获得 'combined' OR 短语排名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7782633/