2011-08-05 19 views
1

我有以下要求:TSQL蘊含稱重列

SELECT Id,SearchKeyWords, PTitle, PDescription, Presentation, Category, ManufacturerId 
FROM V_ProductForSearch 
WHERE CONTAINS ((SearchKeyWords, PTitle, PDescription, Presentation), @KeyWords) 

是否有可能屬性不同的權重,其中術語被發現列的功能。舉例來說,在這種情況下,前兩列的權重爲0.8,最後一列的權重爲0.5。

我知道當我們有幾個搜索條件時可以分配一個權重,但是有可能對列做同樣的事情嗎?

回答

1

微軟並沒有提供實現這一點的方法,你只能權衡這些關鍵詞,因爲它已經實現了。 http://msdn.microsoft.com/en-us/library/ms187787.aspx(閱讀G段)

我試圖做一個替代方式做到這一點,我希望它可以使用。

我在做什麼是稱重SearchKeyWords = 5,PTitle = 4,PDescription = 3,演示= 2這些值被總結並命令由

SELECT Id,SearchKeyWords, PTitle, PDescription, Presentation, Category, ManufacturerId, SUM(srank) ranked 
FROM (
SELECT Id,SearchKeyWords, PTitle, PDescription, Presentation, Category, ManufacturerId, 5 srank 
FROM V_ProductForSearch 
WHERE CONTAINS ((SearchKeyWords), @KeyWords) 
UNION ALL 
SELECT Id,SearchKeyWords, PTitle, PDescription, Presentation, Category, ManufacturerId, 4 srank 
FROM V_ProductForSearch 
WHERE CONTAINS ((PTitle), @KeyWords) 
UNION ALL 
SELECT Id,SearchKeyWords, PTitle, PDescription, Presentation, Category, ManufacturerId , 3 srank 
FROM V_ProductForSearch 
WHERE CONTAINS ((PDescription), @KeyWords) 
UNION ALL 
SELECT Id,SearchKeyWords, PTitle, PDescription, Presentation, Category, ManufacturerId, 2 srank 
FROM V_ProductForSearch 
WHERE CONTAINS ((Presentation), @KeyWords)) a 
GROUP BY Id,SearchKeyWords, PTitle, PDescription, Presentation, Category, ManufacturerId 
ORDER BY SUM(srank)