【问题标题】:How do I get a 'combined' ranking of OR phrases using CONTAINSTABLE in SQL Server?如何在 SQL Server 中使用 CONTAINSTABLE 获得 OR 短语的“组合”排名?
【发布时间】:2016-03-17 04:07:57
【问题描述】:

我想用 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 术语进行综合排名...基本上是每个短语排名的总和。

我怎样才能做到这一点? 看起来它应该是相当微不足道的......但我的搜索没有产生关于此事的有用信息。

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    在阅读了有关 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
    

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-27
        • 2017-04-09
        • 1970-01-01
        • 1970-01-01
        • 2020-11-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多