2009-06-11 77 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

我会创建一个连接两列的视图,并通过存储过程在该视图上使用全文搜索。