SQL ContainsTable返回低Rank以进行完全匹配

时间:2013-03-27 14:26:02

标签: sql sql-server-2008 search full-text-search containstable

对于名为“具有升级赛车框架的红色自行车”的产品,包含稳定搜索将返回以下内容:

containstable(tbl, col, '"red bike"') Rank: 100
containstable(tbl, col, '"red bike with upgraded racing frame"') Rank: 255

我的问题是:

  • 为什么第二次搜索返回255而不是1000 - 我应该使用除containsstable以外的其他内容吗?
  • 有没有更好的方法来实现我的最终结果?

我正在寻找的最终结果是搜索产品名称的快捷方式。我选择使用containsstable,因为我的测试显示它比'tbl.col.field =“”或tbl.col.field更快,比如'%%'',还因为我希望能够进行全文搜索除了部分和完全匹配搜索。

产品名称结果与其他结果汇总 - 例如,当用户运行搜索时,将搜索产品名称和产品说明,并合并结果。出于这个原因,我希望确切的产品名称匹配排名最高,但目前发生的情况是,有时描述全文匹配将超出确切的产品名称匹配。

我试图避免为每种搜索类型编写多个查询并硬编码排名值。

1 个答案:

答案 0 :(得分:0)

我不相信无论如何都要为具有CONTAINSTABLE全文搜索结果的列指定加权值,就像您想要的那样。

您可以在各列上使用FREETEXTTABLE来实现自己的自定义“排名”系统,然后将结果与排名结果的自定义weigned值一起使用,从而使“产品名称”具有更高的预测性变通。