【问题标题】:SQL Server Full-Text Rankings ExampleSQL Server 全文排名示例
【发布时间】:2010-09-22 23:51:52
【问题描述】:

到目前为止,我的全文查询没有得到有意义的结果,所以我决定举一个简单的例子来说明我正在尝试做的事情以及我期望的结果。

我已经为 [Car] 列和主键 [CarID] 启用了以下测试表 (tblCars)。

车牌车 ----- ----- 9 宝马 330Ci 2009 14 奥迪 A4 2010 16 奥迪 A3 2.0T 2009

我想对术语“audi OR bmw”进行排名搜索,我希望在所有搜索结果中获得相同的排名。

SELECT tblCars.*, [RANK] AS Ranked FROM viewCarSearch 内部联接 (选择 [KEY] 作为 CarID,[RANK] 从 CONTAINSTABLE 中排名 (tblCars,汽车,@SearchOr)) tblSearch ON tblCars.CarID = tblSearch.CarID

相反,我得到了这个:

CarID汽车排行 ----- ------ -------- 9 宝马 330Ci 2009 48 14 奥迪 A4 2010 32 16 奥迪 A3 2.0T 2009 32

事实上,无论我使用哪种 OR 组合,即使看起来完全不合逻辑,BMW 的排名总是高于或等于 AUDI。我尝试在我的搜索词中使用一些 AND,但它仍然给出了奇怪的结果,BMW 的显示总是比预期的要好。

谁能指出我哪里出错了...我想我的期望一定是错的,但我无法想象我将如何在一张大桌子上获得排名靠前的结果。

【问题讨论】:

    标签: sql-server full-text-search


    【解决方案1】:

    显然,微软认为宝马是比奥迪更优秀的汽车。 :-)

    好吧,说真的,计算返回的 RANK 有很多因素,这是一个 1 到 1000 之间的无单位数。全文主要使用 Jaccard Index 来计算排名。考虑的其他因素包括文档长度(其他因素相同,较短的文档将比较长的文档排名更高)和文档中搜索词/短语的出现次数。

    我解释你的结果的最佳猜测是:

    • CarID 14 和 16 非常相似 文本,前 10 个字符不同 仅在两个字符中(位置 7 处 4 对 3,位置 10 处 0 对 .),因此它们将 排名靠前。事实上,在您的示例中,它们的结果是相同的。
    • CarID 9 的文本比 CarID 16 的短,所以它 将获得更高的排名。

    【讨论】:

    • ...并且 CarID 14 的文本比 CarID 9 的文本短,因此按照相同的逻辑,我希望 CarID 14 胜过它...也许我只需要更多数据才能真正看到更好的结果。感谢您的反馈。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 2018-09-23
    相关资源
    最近更新 更多