代码之家  ›  专栏  ›  技术社区  ›  E.J. Brennan

用于存储过程的简单文本匹配alogritm

  •  0
  • E.J. Brennan  · 技术社区  · 15 年前

    我在一个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中相当基本的逻辑将返回找到准确字符串的记录。我希望它也返回记录只是“狗”和“房子”,即使字符串不完全相邻。

    更好的是,如果有一种方法可以用“最佳匹配”来对记录进行排名,那就更好了,例如,如果找到“狗屋”,它就是一个精确的匹配,如果找到“狗”和“房子”,第二个最佳匹配,如果找到“狗但不是“房子”或“房子”,但不是“狗”的第三个最佳匹配等等。

    有没有一个通用的算法可以满足我的大部分需求?

    2 回复  |  直到 8 年前
        1
  •  2
  •   Aaron Alton    15 年前

    你应该看看全文搜索。它是专门设计来做你所要求的,而且做得非常好。

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

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

        2
  •  0
  •   Nick    15 年前

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