2010-09-22 43 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