2010-09-22 46 views
2

到目前为止,我没有从我的全文查询中获得有意义的结果,因此我决定给出一个简单的示例,说明我正在尝试执行的操作以及我期望的结果。SQL Server Full-Text排名示例

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

 
CarID Car 
----- ----------------- 
9  BMW 330Ci 2009 
14 AUDI A4 2010 
16 AUDI A3 2.0T 2009 

我要运行术语“奥迪,宝马”一个排名的搜索,我希望得到所有的搜索结果排名等。

 
SELECT tblCars.*, [RANK] AS Ranked FROM viewCarSearch 
    INNER JOIN 
    (SELECT [KEY] AS CarID, [RANK] AS Ranked FROM CONTAINSTABLE 
    (tblCars, Car, @SearchOr)) 
    tblSearch ON tblCars.CarID = tblSearch.CarID 

相反,我得到这个:

 
CarID Car    Ranked 
----- ------------------ ------- 
9  BMW 330Ci 2009  48 
14 AUDI A4 2010  32 
16 AUDI A3 2.0T 2009 32 


事实上,无论我做什么OR的组合,宝马永远是排高于或等于AUDI即使它看起来完全不合逻辑。我尝试过在搜索字词中使用一些AND,但仍然给出了奇怪的结果,宝马总是表现得比预期更有利。

任何人都可以指出我要去哪里错......我想我的期望一定是错的,但我无法想象我将如何得到一张大桌子的好排名结果。

回答

1

显然,微软认为宝马是奥迪的上乘车。 :-)

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

我最好的解释你的结果的猜测,我要强调,这只是一个猜测,就是:

  • CarIDs 14和16有非常相似的 文本,前10个字符只有两个变化 字符(第7位的4对3,第10位的0对比),所以他们将 排在一起。事实上,他们在你的例子中是平等的。
  • CarID 9的文字比CarID 16的短,所以它 将有更高的排名。
+0

...和CarID 14的文字比CarID 9的文字短,因此通过相同的逻辑,我期望CarID 14能够胜过它......也许我只是需要更多的数据才能真正看到更好的结果。感谢您的反馈意见。 – 3advance 2010-09-24 16:08:12