最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 【功能CODE】PHP分词后,使用SQL字段权重排序查询

    正文概述 转载于:掘金(秋辰)   2021-07-12   548

    应用场景

    应用场景为已使用SWCS分词及SPHINX搜索引擎后,仍需要使用SQL进行单独独立字段分词。

    实现效果为:记录分词后每个关键词再数据表中各字段出现的次数,并根据不同字段累加实际使用的权值。通过权值进行搜索排序。

    废话不多~直接上干货!

    关键代码

    //如果有分词的情况下进入
    if($keywords_tags){
    	//增加筛选条件
       $pre_next_page_sql = "*,( ";
       //开始遍历循环判断SQL中出现的分词次数
       foreach ($keywords_tags as $tags_key => $tags_value) {
           $tags_value = str_replace('"',"",$tags_value);
           //字段A代表着数据表中的字段,后面累加的10或1为要累加的权值 可动态修改
           $pre_next_page_sql .= "IF(LOCATE('".$tags_value."',字段A) , 10, 0) + 
                          IF(LOCATE('".$tags_value."',字段B) , 1, 0) + 
                          IF(LOCATE('".$tags_value."',字段C) , 1, 0) + 
                          /*此处省略N个字段*/
                          IF(LOCATE('".$tags_value."',字段N) , 1, 0) +";
       }
       //将权值重命名为tags_weight字段
       $pre_next_page_sql .= " 1) AS tags_weight";
    }
    
    //在排序的规则处增加OrderBy
    $order_by = " ORDER BY tags_weight DESC";
    
    //最后,根据使用框架拼接SQL即可
    

    问题思路

    其中的关键重点在于使用了SQL中的 LOCATE 函数,该函数的解析为:

    	LOCATE(substr,str),   LOCATE(substr,str,pos)
    

    第一个语法返回字符串str第一次出现的子串substr的位置。

    第二个语法返回第一次出现在字符串str的子串substr的位置,从位置pos开始。 substr不在str中,则返回0。

    配合使用SQL中的IF判断,如果分词后的字符串出现在了字段条件中,即说明字段包含改分词,则累加对应的 权值 最后根据 tags_weight 字段倒序排序查询,即可实现该功能。


    起源地 » 【功能CODE】PHP分词后,使用SQL字段权重排序查询

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元