事情本身不复杂,线索都在日志里。搜索的查询只对 post_title 做了模糊匹配,正文里的词一个都搜不到。用户搜具体报错原文全是没有结果,跳出率八成。
第一反应是「检索索引表没建,每次都是全表扫描」,验证下来不成立。
排查方向其实有限,先把可能性排一排。查询只匹配标题字段,正文与标签没进检索范围。还有一种是分词用整串匹配,长一点的词永远命中不了。
另外,无结果时不做任何联想与相近推荐。
上来先比对标题与正文的命中差异
SELECT ID FROM wp_posts WHERE post_content LIKE '%upstream timed out%' LIMIT 5;
接着把正文与摘要纳进检索范围
ALTER TABLE wp_posts ADD FULLTEXT KEY ft_search (post_title, post_content);
补一层同义词与分词处理
SELECT ID FROM wp_posts WHERE MATCH(post_title, post_content) AGAINST('upstream timeout' IN NATURAL LANGUAGE MODE);
无结果时输出相近文章而不是空页
怎么算真的好了,看的是同一批现象。长尾报错词能搜到对应文章,无结果率从六成降到一成五,搜索后的停留时间明显变长。
容易忽略的是,技术站的搜索价值就在报错原文,只匹配标题等于把最有用的那部分内容藏起来。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
