2009-10-23 20 views
2

我需要建立一些搜索邏輯來產生排名結果。一個簡單的例子就是查詢名字,姓氏和郵政編碼列表。所需的輸出將是匹配行的列表,按照匹配程度的順序排列。用於生成排名的SQL結果的首選方法?

即,最上面的結果將是所有三列匹配的結果,其次是那些只匹配兩列的結果,然後是單列匹配。

是否有公認的偏好說全文索引在多個查詢和結果?有什麼我絕對不應該做的?

我很欣賞這一切都很模糊,與SO問題的具體性質略有不同,但我正在尋找關於採取的方法的指導而不是'做我的作業'類型的問題:-)

(該平臺的SQL Server 2005)

回答

0

這是一個快速的SQL解決方案,可以與您匹配。創建此功能,您可以
ORDER BY dbo.func_getWeightByColumn(@firstname, firstname, @lastname, lastname, @zipcode, zipcode) DESC

CREATE FUNCTION [dbo].[func_getWeightByColumn] 
(
@p1a varchar(50), 
@p1b varchar(50), 
@p2a varchar(50) = 'a', 
@p2b varchar(50) = 'b', 
@p3a varchar(50) = 'a', 
@p3b varchar(50) = 'b', 
) 
RETURNS int 
AS 
BEGIN 
DECLARE @Result int 
SET @Result = 0 

IF @p1a = @p1b 
BEGIN 
    SET @Result = @Result + 1 
END 

IF @p2a = @p2b 
BEGIN 
    SET @Result = @Result + 1 
END 

IF @p3a = @p3b 
BEGIN 
    SET @Result = @Result + 1 
END 

RETURN @Result 
END; 
+0

現在,這是我甚至沒有考慮過的方法!謝謝。 – Garry 2009-10-23 15:09:01

1

全文索引肯定會給你這個 - 你可以用CONTAINSTABLEFREETEXTTABLE查詢FTS(全文服務器),並獲得可能的匹配,包括他們的排名/相關的列表。

退房有關淺談SQL Server全文搜索的優秀介紹文章:

是一個很好的起點。

Marc

+0

優秀,感謝您的鏈接後。我以前讀過第一本,但不是第二本。現在就讀它! – Garry 2009-10-23 15:01:29

相關問題