Использование полнотекстового поиска 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).
Я уверен, что есть простой способчтобы достичь этого, но я не вижу этого.
Некоторые ограничения -
- Запрос представляет собой выражение CTE в UDF.
- Я мог бы легко выполнитьначальный запрос для получения @ MAXRelevance = SELECT MAX (Relevance) ... затем используйте Max (Relevance) в предложении WHERE, но полнотекстовый поиск не гарантирует возврат одинаковых абсолютных значений для результатов релевантности при повторных поисках.
Существующая функция:
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<=@ResultDepth)
RETURN
END