sql - 如何在 SQL Server 中使用 CONTAINSTABLE 获得 'combined' OR 短语排名?

标签 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 多个职位描述,其中一些包含所有关键字。我看到的是它给那些包含“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/

相关文章:

MYSQL删除每个GROUP超过15条的所有记录

sql - 使用 INSERT...SELECT 返回 RETURNING 的替代方法

java - 如何在 jdbc MySQL 查询中处理 0000-00-00 日期

c# - 将表类型从 C# 传递到存储过程?

sql-server - SQL Server 2008 更新触发器

php - 获取每个专辑的图片

sql - 在 SQL 中存储直方图的最有效(存储空间)方式

sql-server - 使 Azure 防火墙规则自动过期

sql - 如何在与子查询的连接中使用连接表中的列

SQL Count 基于时间