TSql содержит взвешенные столбцы - PullRequest
1 голос
/ 05 августа 2011

У меня есть следующий запрос:

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

Можно ли приписать другой вес в функции столбца, в котором был найден термин. Например, в этом случае это будет вес 0,8 для двух первых столбцов и 0,5 для последних.

Я знаю, что можно назначить вес, когда у нас есть несколько поисковых терминов, но возможно ли сделать то же самое для столбцов?

1 Ответ

1 голос
/ 12 августа 2011

Microsoft не предложила способ достижения этого, вы можете только взвесить ключевые слова, как это было сделано.http://msdn.microsoft.com/en-us/library/ms187787.aspx (Прочтите параграф G.)

Я попытался сделать альтернативный способ сделать это, я надеюсь, что он может быть использован.

То, что я делаю, это взвешивание SearchKeyWords= 5, PTitle = 4, PDescription = 3, Presentation = 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) 
...