刚上架的商品搜不到,tigshop开源商城搜索是怎么查的

运营刚建了个新品,前台搜索框里怎么都搜不出来,跑来说搜索坏了。先别急着当 bug,把搜索走的这条路捋清楚,八成能自己排掉。

先说清楚它是怎么查的,省得瞎猜。前台搜索接口在 php/app/api/controller/search/Search.php,实际干活的是 php/app/service/admin/product/ProductSearchService.php。它就是拼数据库查询,开源版没有内置 Elasticsearch,就是走 MySQL 查 。关键词是拿去做 LIKE 匹配的,命中的字段有三个,在 ProductService 里能看到:

php 复制代码
$query->where('product_name', 'like', '%' . $filter['keyword'] . '%')
    ->whereOr('keywords', 'like', '%' . $filter['keyword'] . '%')
    ->whereOr('product_sn', 'like', '%' . $filter['keyword'] . '%');

也就是商品名、keywords(分词关键词)、商品货号,任意一个包含你搜的词就能出。搞清这点,下面就好查了。

商品是不是真上架了

搜索接口拉列表时带的是 product_status => 1,只有上架的商品才会出。所以第一件事是去 product 表查这条记录的 product_status,顺带看 check_status 审核状态。没上架或者没过审的商品,前台本来就不该被搜到,这是最常见的一条,先排掉它再说别的。

搜的词命不命中那几个字段

前面说了匹配的是商品名、keywords、货号。你搜的词得真的落在这几个里。拿商品名里明确有的词试一下,能搜到就说明查询没毛病,是关键词的事,不是搜索坏了。

keywords 字段有没有写进去

keywords 是分词关键词,正常是商品保存时由 ParticipleService::cutForSearch() 根据商品名自动切出来写进去的。如果这条商品的 keywords 是空的(比如老数据、或者导入时没走正常保存流程),那用商品名里的词还能命中 product_name,但靠分词联想的词就搜不出来了。去表里看一眼这个字段是不是空的。

缓存有没有压着旧结果

搜索结果有时也走缓存。前面几项都对还是搜不到,清一次缓存再搜,排掉是缓存的可能。

商品量真上来了再考虑 ES

如果客户量级起来了、LIKE 查着明显慢,二开接 Elasticsearch 是常规做法,钩子挂在商品保存之后、保存即同步索引就行。但单商户体量下,商品没到几万几十万那个级别,标品这套 DB 搜索够用,先别急着上 ES 给自己加一摊运维。真到了要上的那天,先压测确认瓶颈在搜索,再动手。

相关推荐
Sagittarius_A*2 小时前
【RCELABS】Level 17~18 —— PHP命令执行函数与环境变量注入
开发语言·安全·web安全·靶场·php·rce
破碎的南瓜3 小时前
靶场中使用到的php函数以及每种漏洞的防御方式
开发语言·php
谁看我谁 狼家二丫3 小时前
局域网文件共享实战:从“账户被禁用”到成功互传文件
开发语言·php
开源推荐官3 小时前
本地图切OSS,tigshop开源商城存储驱动切换记录
开源
shuair3 小时前
MySQL 权限管理
数据库·mysql
AC赳赳老秦4 小时前
软著公开信息批量采集:OpenClaw 抓取软件著作权公开数据,分析企业技术布局方向
大数据·网络·人工智能·python·php·deepseek·openclaw
梓仁沐白4 小时前
【Agent 设计模式】多智能体协作
microsoft·设计模式·php
名字不好奇4 小时前
如何进行软件设计 - OSCHINA - 开源 × AI · 开发者生态社区
开源
m4Rk_5 小时前
【论文阅读】Agent 记忆机制(20):RecMem——只在信息反复出现时进行长期记忆巩固
论文阅读·人工智能·学习·开源·github