如何让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常用命令大全
加微信交流