首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL LIKE话语多条件贪婪加权匹配算法(改进版)

2012-10-19 
SQL LIKE语句多条件贪婪加权匹配算法(改进版)上一篇博客:SQL LIKE语句多条件贪婪匹配算法。直接入题,其他的

SQL LIKE语句多条件贪婪加权匹配算法(改进版)

     上一篇博客:SQL LIKE语句多条件贪婪匹配算法。


     直接入题,其他的就不罗嗦了。

     上篇博客仅仅是实现了多个关键字“尽可能多的匹配”。

     但是在实际应用中,尽可能多的匹配不一定合理。

     就拿“如何在CSDN网站注册用户”这句话来说,拆成“CSDN”、“注册”、“用户”这三个词。假如数据库中某条记录匹配了“CSDN”、“注册”这两个词,另一条记录匹配了“注册”、“用户”这两个词。两条记录中匹配词的个数都是两个,如果仅仅用上一篇博客的算法,这两个记录是对等的,而显然,他们不是对等的!“CSDN”这个词在这句话中至关重要,他是先决条件。因此,匹配“CSDN”、“注册”这两个词的记录要比匹配“注册”、“用户”这两个词的记录优先。

     基于以上事实,让我们清醒的意识到关键词并不是对等的,应该给他们分配一个权重,权重高的优先。

     SQL LIKE语句多条件贪婪匹配加权改进版:

execute proc_Common_SuperLike 'id','t_test','content','20','|','i|o|c'

    id表的主键字段名称。

    t_test表名。

    content匹配内容字段名称。

    20选出20个记录(从顶至下匹配度越来越低)。

    |关键字的分隔符号。

    i|o|c一共有i,o,c三个关键字,通过|分隔。

 

    不同的是,关键字有了权重的概念。

    规则:i|o|c这三个关键字,权重依次降低,i的权重是3,o的权重2,c的权重是1。

    也就是说,把重要的关键字靠前放,不重要的关键字靠后放,越靠前权重越高。

 

    需要说明的是:

 

    本算法以权重+匹配数综合结果作为判断标准,而不再是一味的贪婪。

    比如有a|b|c|d|e五个关键字,按照规则,权重分别是:a-5、b-4、c-3、d-2、e-1,假如某条记录匹配了a、b、c三个关键字,另一条记录匹配了b、c、d、e四个关键字。

    依照算法:

    第一条记录最终权重是5(a权重)+4(b权重)+3(c权重)+3(匹配数)=15

    第二条记录最终权重是4(b权重)+3(c权重)+2(d权重)+1(e权重)+4(匹配数)=14

    因此优先选择第一条记录,虽然第一条记录的匹配数没有第二条多,但最终权重高。

 

    原创算法,欢迎转载,可用于任何用途,注明出处即可。


热点排行
Bad Request.