一种模糊查询,应用搜索引擎的分词机制

说明工作原理:

例子:

对于查询

              "我可以理解你吗"

拆分为"我可","可以","以理","理解","解你","你吗"

查询到两个符,则权值加上相应的值:"我可"+1,"可以"+2,"以理"+3,"理解"+4,"解你"+5,"你吗"+6.

 

以下为mysql的存储过程:

 

CREATE

BEGIN
/*通过函数间接取得存储过程的值*/
declare addresslen,i int default 1;        /*申明变量*/

set addresslen=CHAR_LENGTH(trim(paddress));
set @casestr='';/*通过临时字符串方式得到数据的where条件*/
set @wherestr='';/*查询条件过滤*/
if(addresslen>1) then

while i<=addresslen-1 do
        /*通过select的权重条件*/
        set @casestr=concat(@casestr,'case when INSTR(a.addressname,',char(39),substring(paddress,i,2),char(39),')>0 then ',11-i,' else 0 end+');
        /*通过where的过滤条件*/
        set @wherestr=concat(@wherestr,'  INSTR(a.addressname,',char(39),substring(paddress,i,2),char(39),')>0  or');
 set i=i+1;
        if(i>10) then
           set i=addresslen+1;/*跳出循环*/
        end if;
end while;
/*去除最后的+号*/
set @casestr=substring(@casestr,1,CHAR_LENGTH(trim(@casestr))-1);

/*去除最后的or*/
set @wherestr=substring(@wherestr,1,CHAR_LENGTH(trim(@wherestr))-2);

/*组合查询的sql语句*/
 set @sql=concat('select a.mail_feearea,concat(a.send_office,',char(39),'(',char(39),',a.city_name,',char(39),',',char(39),',a.county_name,',char(39),')',char(39),') send_office,(',@casestr,') seqn  from td_mailfeearea a where ',@wherestr,' order by seqn desc ');

else
 set @sql=concat('select  ',char(39),char(39),'  mail_feearea,',char(39),char(39),'  send_office,',char(39),char(39),'  seqn ');
end if;
                    PREPARE stmt FROM @sql;
                    EXECUTE stmt ;
/*select @sql;*/
END

转载于:https://www.cnblogs.com/yingfeng/archive/2012/02/29/2372874.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值