搜「缓存」排在最前面的是一篇只在文末提了一句的新闻,标题里带缓存的两篇技术文章反倒被挤到第三页。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,默认列表按发布时间倒序,标题命中与正文一笔带过给同样的权重,命中次数也没有参与排序,用户自然觉得搜索不准,排序看着很随意。
碰到「搜索相关度排序」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。改完顺手把文档补一句,省得下次自己重新推一遍。
SELECT ID, post_title, (post_title LIKE '%缓存%') AS in_title FROM wp_posts WHERE post_status='publish' ORDER BY in_title DESC, post_date DESC LIMIT 10;
监控和日志的时间要对上,时区不一致会多绕很大一圈。
具体做法是,先把排序规则从按发布时间倒序换成按相关度计算;给标题命中的文章单独加权,权重高于正文提及;把命中次数作为次级条件,同权重时再按次数排。
最后用这个标准收尾,标题命中的文章出现在第一页,正文只提一句的排到后面去。
