2009-06-11 78 views
0

我有一個在sql server數據庫中有兩個字段的表,我的asp.net應用程序使用'@SearchString'參數調用存儲過程,存儲過程查找所有記錄@Searchstring值在表中的兩個字段的串聯發現,稱他們爲「字段1」和「字段2」在存儲過程中使用的簡單文本匹配alogritm

所以邏輯是這樣的(我已經簡化了實際的查詢):

CREATE PROCEDURE [dbo].[sp_FindMatches] @SearchString varchar(30) 
AS 
    SELECT * FROM Table1 WHERE Field1+Field2 LIKE @SearchString 

我想改進這個相當基本的匹配算法,以便它在匹配的記錄中沒有那麼嚴格。例如,如果用戶輸入「DOG HOUSE」作爲參數,則現有SP中相當基本的邏輯將返回記錄,以找到確切的字符串。即使字符串並不完全相鄰,我也希望它只返回「DOG」和「HOUSE」的記錄。

更好的是,如果有一種方法按照「最佳匹配」對記錄進行排名,它會更好,也就是說,如果找到「DOG HOUSE」,它就完全匹配,如果「DOG」和「HOUSE」被發現,第二最佳匹配,如果「狗而不是‘房子’或‘房子’而不是‘狗’第三最好等

是否有一個通用的算法,做很多我想要的東西?

回答

2

你應該看全文搜索,它是專門設計用來完成你要求的功能,而且它的功能非常好。

你用傳統的TSQL實現這一點l使受影響列上的所有索引完全無法使用。

而且不要被全文搜索嚇倒 - 設置起來非常簡單。

0

我會創建一個連接兩列的視圖,並通過存儲過程在該視圖上使用全文搜索。