【问题标题】:simple text matching alogritm for use in stored procedure用于存储过程的简单文本匹配算法
【发布时间】:2009-06-11 13:15:32
【问题描述】:

我在一个 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' 第三最佳等。

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

【问题讨论】:

    标签: sql sql-server-2008 stored-procedures pattern-matching


    【解决方案1】:

    您应该查看全文搜索。它是专门为满足您的要求而设计的,而且做得非常好。

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2012-10-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-26
        • 1970-01-01
        • 1970-01-01
        • 2016-05-20
        • 2016-05-31
        • 1970-01-01
        相关资源
        最近更新 更多