如何让ThinkPHP支持模糊搜索

Posted ytkah

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让ThinkPHP支持模糊搜索相关的知识,希望对你有一定的参考价值。

  最近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支持模糊搜索的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp怎么做模糊查询搜索,完整实例,笨办法

如何让nginx支持ThinkPHP框架

thinkphp---模糊查询详解

thinkphp5 怎么将变量作为模糊查询条件

php实现模糊查询

Elasticsearch在thinkphp5中的使用增删改查(模糊查询批量查询)