最近ytkah在做一个ThinkPHP的项目时发现了一个问题,搜索的功能只能检索出以*为开头的内容,不能检索出中间的词。例如:搜索包含6775的产品,搜索结果为空,而搜索000-6775 就有两个结果。其实就是希望ThinkPHP能支持模糊搜索,如果你对tp比较熟悉的话很快可以定位到具体的文件,比如/app/product/model/product.php,找到如下代码

if('' != $keyword) {
$where['part'] = ['LIKE', $keyword.'%'];
}

  修改成

if('' != $keyword) {
$where['part'] = ['LIKE', '%'.$keyword.'%'];
}

  注意,可能有好几个地方,就是将$keyword.'%'改为'%'.$keyword.'%',这样数据库压力可能会加大,本来只要匹配以abc为开头,现在要匹配所有,查询次数一下增加好几倍甚至几十倍,如果数据量小还可以,百万级别以上的数据压力就很大了,所有要做好权衡,有能力的话可以考虑用electric search来替代原来的站内搜索,或者其他解决方案。

  可能有朋友会说不知道搜索函数定义在哪个文件里,可以全盘搜索$keyword,当然你需要一点服务器的操作知识,ytkah已经为你整理好了linux常用命令大全

如何让ThinkPHP支持模糊搜索的更多相关文章

  1. ThinkPHP支持模型的分层

    ThinkPHP支持模型的分层 ,除了Model层之外,我们可以项目的需要设计和创建其他的模型层. 大理石平台支架 通常情况下,不同的分层模型仍然是继承系统的\Think\Model类或其子类,所以, ...

  2. 让thinkphp 支持ftp上传到远程,ftp删除

    让thinkphp真正的支持FTP上传.删除. 原创by default7#zbphp.com,如需转载请保留作者信息. /** * This is not a free software, All ...

  3. thinkphp支持大小写url地址访问,不产生下划线

    from:http://www.111cn.net/phper/thinkPhp/57748.htm 一.在配置文件中开启了thinkphp的大小写识别功能,使链接大小写都可以正常访问: ‘URL_C ...

  4. 详解ThinkPHP支持的URL模式有四种普通模式、PATHINFO、REWRITE和兼容模式

    URL模式     URL_MODEL设置 普通模式    0 PATHINFO模式     1 REWRITE模式     2 兼容模式     3 如果你整个应用下面的模块都是采用统一的URL模式 ...

  5. Lucene 分析的意思是按照某种规则进行内容拆分 支持模糊搜索

    Lucene 分析的意思是按照某种规则进行内容拆分 里面的域的值是拆分后的内容

  6. ThinkPHP支持的4种路由模式

    下面这个说法和示例,比较具有总结性.

  7. js两个数组去重后,绑定控件,并支持模糊搜索数组项以及数组互移

    设计大概是这个样子的,很简单,两个div,两个互移按钮,一个搜索框,要求搜索框输入时,触发待选框的搜索项 <input class="form-control" placeh ...

  8. 配置Nginx支持ThinkPHP的URL重写和PATHINFO

    ThinkPHP支持通过PATHINFO和URL rewrite的方式来提供友好的URL,只需要在配置文件中设置 'URL_MODEL' => 2 即可.在Apache下只需要开启mod_rew ...

  9. Nginx 开启PATHINFO支持ThinkPHP框架实例

    ThinkPHP支持通过PATHINFO和URL rewrite的方式来提供友好的URL,只需要在配置文件中设置 'URL_MODEL' => 2 即可.在Apache下只需要开启mod_rew ...

随机推荐

  1. 阅读java编程思想之一切都是对象

    温故而知新--- 1. 用句柄操作对象 现实生活中,我们可以把遥控器当作句柄,电视机当作对象.当我们拿到句柄(遥控器)的时候,我们是可以控制对象的(电视机).比如说调节音量大小,色彩等.那么在程序里, ...

  2. 第02组 Alpha冲刺(5/6)

    队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 摸鱼 准备"Alpha事后诸葛亮" 提交记录(全组共用) 接下来的计划 沟通前后端成员,监督.提醒他们 ...

  3. pytorch的state_dict()拷贝问题

    先说结论,model.state_dict()是浅拷贝,返回的参数仍然会随着网络的训练而变化.应该使用deepcopy(model.state_dict()),或将参数及时序列化到硬盘. 再讲故事,前 ...

  4. [报名中] 腾讯技术专家为你揭秘"音视频及融合通信技术"

    | 导语 6月29日,北京东直门亚朵S酒店,云+社区邀您参加<音视频及融合通信技术>沙龙活动,深度探讨音视频及融合通信技术的发展及实践,领略前沿,共创价值. 数字多媒体技术的不断发展对音视 ...

  5. FontForge 汉化教程

    引用 :http://www.sucaijishi.com/2018/articles_0815/258.html FontForge是一款免费字库编辑工具,官方暂不提供简体中文,本文汉化方法在201 ...

  6. 获取Url地址中参数的3种方法【华为云技术分享】

    获取Url的代码如下:window.location.href; 方法一:原生js(假设已经获得了Url地址) var url = 'https://gitbook.cn/gitchat/geekbo ...

  7. Linux纯小白操作(以安装JDK为例)

    [本文只针对纯小白,有基础的请略过] 最近公司给分配工作使用的虚拟机都是Linux系统的,以前完全没接触过,今天按照网上一些教程操作,好多地方感觉对小白不够友好(有些问题非常小白那些教程没有写出来.我 ...

  8. 添加wcf服务引用,无法签出当前文件

    写了一些wcf服务接口,使用控制台可以正常启动服务,想要测试一下,新建项目添加服务引用,提示:“无法签出当前文件.该文件可能为只读或已锁定,或者您需要手动签出它.” 在网上找了找,有说可能是因为源代码 ...

  9. rabbitmq 延迟队列

    1.rabbitmq 延时的原理,有2个队列,一个是发送消息,设置消息过期时间或者队列过期时间(死信队列),如果达到过期时间后 将改消息发送到指定的队列中进行处理. 链接:https://share. ...

  10. Eureka客户端续约及服务端过期租约清理源码解析

    在之前的文章:EurekaClient自动装配及启动流程解析中,我们提到了在构造DiscoveryClient时除了包含注册流程之外,还调度了一个心跳线程: scheduler.schedule( n ...