0

我在 sql server 数据库中有一个包含两个字段的表,我的 asp.net 应用程序调用一个带有“@SearchString”参数的存储过程,该存储过程查找在两个字段的串联中找到 @Searchstring 值的所有记录表,称它们为“Field1”和“Field2”

所以逻辑看起来像这样(我已经简化了实际的查询):

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”,第二个最佳匹配,如果“dog but not 'house' 或 'house' but not 'dog' 第三最佳等。

是否有一种通用算法可以满足我的大部分需求?

4

2 回答 2

2

您应该查看全文搜索。它专门设计用于完全满足您的要求,并且做得非常好。

您使用传统 TSQL 实现这一点的方式将使受影响列上的任何索引完全不可用。

不要被全文搜索吓到 - 设置起来非常简单。

于 2009-06-11T13:18:11.387 回答
0

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

于 2009-06-11T13:23:43.523 回答