新商品搜索不到时,不要马上全量重建所有索引。先确认商品是否满足当前网站、store view 和搜索引擎的收录条件,再检查 catalogsearch_fulltext 是否更新。

先核对商品本身

  • 商品状态为启用。
  • 已分配到当前网站。
  • Visibility 包含 Search,而不是仅 Catalog 或 Not Visible Individually。
  • 库存状态允许前台展示;使用 MSI 时检查销售渠道和 source assignment。
  • 商品名称、SKU 或目标属性在当前 store view 有正确值。

可配置商品的简单子商品通常设置为单独不可见,用户应搜索到父商品,这属于正常行为。

检查索引状态

bin/magento indexer:status catalogsearch_fulltext
bin/magento indexer:show-mode catalogsearch_fulltext
bin/magento indexer:reindex catalogsearch_fulltext

手动 reindex 成功只能说明全量重建可运行。若索引器使用按计划更新,还必须确认后续修改能由 Cron 自动消费。

SELECT view_id, mode, status, updated
FROM mview_state
WHERE view_id LIKE '%catalogsearch%';

SELECT job_code, status, messages, scheduled_at
FROM cron_schedule
WHERE job_code LIKE '%index%'
ORDER BY schedule_id DESC
LIMIT 20;

检查搜索属性

自定义属性需要开启“用于搜索”,修改属性配置后通常要重新索引。文本太短、分词方式、同义词和语言分析器也会影响结果。先使用 SKU 或完整商品名称做精确对照,再判断是否是分词问题。

检查搜索服务

bin/magento config:show catalog/search/engine
bin/magento config:show catalog/search/opensearch_server_hostname
bin/magento config:show catalog/search/opensearch_server_port

确认 Magento 使用的搜索引擎与服务版本匹配,并查看集群健康、磁盘水位和索引是否只读。不要在未知影响范围时直接删除搜索索引。

多商店问题

同一商品可能在默认范围启用,但在某个 store view 被禁用或名称为空。测试时记录网站 ID、store ID 和请求域名,避免在错误范围内验证。

修复后的验证

  1. 搜索 SKU、完整名称和一个普通关键词。
  2. 修改商品名称中的测试词,等待计划索引自动处理。
  3. 确认旧关键词消失、新关键词出现。
  4. 检查分类页和搜索页的价格、库存是否一致。

最终目标是恢复增量索引链路,而不是每次新增商品都手动执行全量 reindex。