使用SQL Server 2005全文搜索我想返回該搜索的最大相關結果百分比內的值。在列的最大值的百分比內返回行
SELECT
A.ActivityID,
KEY_TBL.Rank as Relevance,
DENSE_RANK() OVER (ORDER BY Rank DESC) as SearchRank
FROM Activity A
INNER JOIN FREETEXTTABLE(vwActivitySearch, FTS,'My search expression') AS KEY_TBL ON A.ActivityID = KEY_TBL.[KEY]
回報:
ActivityID Relevance SearchRank
----------- ----------- --------------------
89378 242 1
89406 242 1
88083 236 2
88214 236 2
84007 197 3
83434 197 3
13017 172 4
89247 164 5
89346 164 5
而不是按職級的回報,我想在這個例子中返回大於90%,或一些任意百分比值,最高的相關性,所以
WHERE Relevance>(242*0.9).
我確信有一個簡單的方法來實現這一點,但我看不到它。
一些約束 -
- 該查詢是一個UDF內的CTE的表達。
- 我可以很容易地運行初始查詢來獲得@ MAXRelevance = SELECT MAX(Relevance)...然後在WHERE子句中使用Max(Relevance),但是全文搜索並不保證爲相關結果返回相同的絕對值重複搜索。
現有功能:
CREATE FUNCTION [dbo].[xxActivitySearch] (@SearchTerm varchar(255)='',@ResultDepth int)
RETURNS @ReturnTable Table (ActivityID int,Relevance int,SearchRank int)
AS
BEGIN
WITH T AS (
SELECT
A.ActivityID,
KEY_TBL.Rank as Relevance,
DENSE_RANK() OVER (ORDER BY Rank DESC) as SearchRank
FROM Activity A
INNER JOIN FREETEXTTABLE(vwActivitySearch, FTS,@SearchTerm) AS KEY_TBL ON A.ActivityID=KEY_TBL.[KEY])
INSERT @ReturnTable SELECT * FROM T WHERE (SearchRank<[email protected])
RETURN
END
無法添加第二個CTE,會做SELECT ActivityID,Relevence,SearchRank FROM FirstCTE WHERE Relevence>(242 * 0.9),並用其作爲主查詢的CTE? –
好點Wayne,這幫助我重新關注這一點。因此,我現在通過做類似的事情來解決眼前的問題。但是我仍然認爲應該有一些方法可以在單個查詢中實現這一點,而我只是錯過了一個技巧。展望未來的項目,我懷疑新的SQL Server Denali'分析函數'http://msdn.microsoft.com/en-us/library/hh213234(v=SQL.110).aspx將是一個很大的幫助問題類型。 – Identic
我確定也有。我會繼續做一些研究,因爲我有興趣解決類似的挑戰。 –