FREETEXT在SQL Server 2012中按Rank排序搜索

时间:2014-01-29 04:58:49

标签: sql sql-server sql-server-2012

我想在SQL Server 2012的where子句中使用FREETEXT,但能够根据搜索词的相关性来排序结果。

我知道我可以使用FREETEXTTABLE,但SQL语句将更多地是JOIN,而不是WHERE子句。这对我很重要,因为我需要将FREETEXT语句与其他逻辑比较结合起来。

渴望的状态是能够做到这样的事情:

SELECT Title 
FROM Document 
WHERE FREETEXT(Contents, Title, 'Approved Draft') OR (Status = 'Approved Draft')
ORDER BY RANK? DESC

1 个答案:

答案 0 :(得分:0)

您必须使用FREETEXTTABLE才能获得排名。您仍然可以将其与其他逻辑比较结合起来。

以下是如何修改查询的示例。请记住,在Document.Status = 'Approved Draft'时,您的逻辑将导致0排名,因此您需要决定在这种情况下您想要做什么。

SELECT Document.Title, qFreeText.RANK
FROM Document
LEFT JOIN FREETEXTTABLE(Contents, Title, 'Approved Draft') AS qFreeText
   ON Document.ID = qFreeText.KEY
WHERE (Document.Status = 'Approved Draft') OR (qFreeText.KEY IS NOT NULL)
ORDER BY qFreeText.RANK DESC