刚上架的商品搜不到,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 给自己加一摊运维。真到了要上的那天,先压测确认瓶颈在搜索,再动手。

相关推荐
努力的lpp3 小时前
php反序列化一(大白话版)
开发语言·web安全·php·ctf·反序列化
X54先生(人文科技)4 小时前
ELR-SELLM Edge 神经元网络架构评估报告
人工智能·深度学习·架构·开源
SendTomo4 小时前
【技术交流】从0到1构建一个汉字学习平台:汉字吧(hanzi8.com)的技术架构猜想
redis·mysql·nginx·php·个人开发
IT大白鼠5 小时前
MySQL 分布式集群系列 · 第四篇——实操部署指南:从零搭建生产级 MySQL NDB 集群
数据库·分布式·mysql
小艾.pino5 小时前
ECC 开源项目实战:从原理到落地的技术分享
开源
IT大白鼠5 小时前
MySQL 分布式集群系列 · 第三篇——核心原理精讲:NDB 自动分片、多主写入与数据同步
数据库·分布式·mysql
小羊没烦恼!5 小时前
Hello Web API系列教程——Web API与国际化
java·服务器·前端·javascript·php
冬奇Lab5 小时前
一天一个开源项目(第212篇):OpenMAIC —— 清华出品的多智能体交互式课堂
人工智能·开源·资讯
初願致夕霞7 小时前
MySQL_索引
数据库·mysql
萧鼎7 小时前
2026实战:用 tomlkit 优雅读写 TOML 配置,告别手写解析器
python·开源·教程·python库