php,tp5关键词,分词模糊查询并根据查询条件排序

php,tp5关键词,分词模糊查询并根据查询条件排序

1.大概需求是我这边搜索"维修工",需要先搜索维修工再搜索维修,用一般模糊查询的话会导致维修的词出不来,所有这边需要先进行分词

public function getword($topictitle=''){//维修工
    

        $length = mb_strlen($topictitle, 'utf-8');//计算文字长度

        $titlearray = [];
        $titlearrays = [];

        for ($i=0; $i<$length; $i++)

        {

            $titlearray[] = mb_substr($topictitle, $i, 1, 'utf-8');//分字得到数组【‘维’,‘修’,‘工’】

        }
        $key='';
       foreach ($titlearray as $k=>&$v){//二次循环得到词语【‘维’,‘维修’,‘维修工’】
         $key.=$v;
         $titlearrays[]=$key;
       }
       // dump($titlearrays);die;
       return  $titlearrays;
    }

这里第二次循环是为了简便模糊查询使用,看个人需求可以不使用直接进行词性匹配按照匹配率进行排序,大概意思就是将三个字分开进行查询然后汇总查出三个数组中所有查询到的内容,再进行对出现次数进行筛选匹配排序等,详细写法在主页另一篇分词教学。

  1. 得到的词语我们进行构建查询条件
	$name='维修工';
 	$words=$this->getword($name); //调用上面方法
  	$w['title']=array('or');
    foreach ($words as $value) {
  		 array_unshift(     $w['title'], array('like', '%'.$value.'%'));
     }
     
     

下面是得到的查询语句:

array(4) {
  [0] =&gt; array(2) {
    [0] =&gt; string(4) "like"
    [1] =&gt; string(11) "%维修工%"
  }
  [1] =&gt; array(2) {
    [0] =&gt; string(4) "like"
    [1] =&gt; string(8) "%维修%"
  }
  [2] =&gt; array(2) {
    [0] =&gt; string(4) "like"
    [1] =&gt; string(5) "%维%"
  }
  [3] =&gt; string(2) "or"
}

3.使用以上方法可以将相关数据查询出来,但是如果不添加排序条件他会根据默认的id进行排序,但是这就会导致带“维”字的数据会排在带“维修工”的前面,所有我们需要用到一个函数LOCATE函数 ,该函数具体含义可自行搜索,下面只写用法

->field('*,LOCATE("'.$name.'",title) as gIndex ')->order('gIndex desc')//将搜索的值进行排序 
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孙奋斗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值