那么,在搜索索引中是否完全无法判断某帖子是否为第一个帖子?
那如果做如下调整呢:
当一个主题中的多个帖子匹配某个搜索词时,且其中有一个帖子是第一个帖子,则给该特定帖子(即第一个帖子)在搜索排名中大幅提升。
这样既能避免机械地“按帖子编号排序”的行为,又能正确地将第一个帖子置于优先位置,你觉得如何?
那么,在搜索索引中是否完全无法判断某帖子是否为第一个帖子?
那如果做如下调整呢:
当一个主题中的多个帖子匹配某个搜索词时,且其中有一个帖子是第一个帖子,则给该特定帖子(即第一个帖子)在搜索排名中大幅提升。
这样既能避免机械地“按帖子编号排序”的行为,又能正确地将第一个帖子置于优先位置,你觉得如何?
目前确实不行,但这并不难实现,因为这与去年我进行的一项优化类似,当时我们实现了按私信(PM)或非私信来过滤 PostSearchIndex。
我认为,在话题内对重复内容进行精确排序的理论优势弊大于利。
用户可能将搜索用作书签,当原本总是跳转到第 77 条的搜索现在跳转到第 892 条时,他们会感到困惑。
火上浇油的是,我们目前没有“跳转到话题中第一条未读内容”的机制,因此优先展示靠后的帖子会带来一个重大弊端:更有可能造成阅读断层(例如:你读了 1、2、3,但没读 4 到 88……现在你看到了 89)。
我更喜欢无条件地优先展示话题中的第一条内容,这样解释起来更简单,也稳定得多。
我同意,这个方案对我有效 ![]()
我们是使用第一个匹配项的排名,还是使用该主题中最佳帖子的排名?我们之前采用的是后者,但这似乎不正确,因为我们拿一个不会出现在搜索结果中的帖子的排名,去与其他主题的帖子进行排名比较。
我认为,在链接时我们应使用 MIN(post_number),而在进行聚合操作时,我们应基于 MAX(rank) 进行排名。
新行为已在以下链接中回滚:
本主题已在 6 天后自动关闭,不再接受新回复。
感谢重新开启此话题。我认为与此相关的问题仍然存在。在 https://community.wanikani.com 上,有一个题为“General Anime Thread”的帖子。如果我搜索“general anime”,该帖子会作为首要结果出现,但链接却指向 第 511 楼。特别奇怪的是,该楼层的内容中甚至不包含“general”或“anime”这两个词。因此,这种情况似乎比最初报告的问题还要严重。据我所知,https://community.wanikani.com 应该已经部署了包含此修复的版本。
再举一个例子,如果我搜索“japanese book club”,会跳转到该话题的 第 925 楼,尽管搜索词实际上就出现在该话题的标题中。
我尝试在 meta 站点复现此问题,但未能成功。不过,这可能只是因为我尝试搜索的特定术语导致的。
您是否通过查看源代码检查了版本?如果此处无法复现,很可能是版本不匹配。
这是来自页面源代码的信息:
Discourse 2.7.0.beta4 - https://github.com/discourse/discourse 版本 47835ade9a3dcebb14bdd744e92d93b9c9199b90
该提交是两天前的,我仍然可以用我上一篇文章中的示例复现此问题。
感谢如此详细的报告,@tgxworld 会快速查看一下!
@sam 我明白这是怎么回事。我们在大型网站上实施了搜索性能优化,仅对部分索引进行搜索。由于首帖非常古老,它未被包含在部分索引中,这就是我们未链接到首帖的原因。我需要仔细考虑修复方案,因为目前我想到的方案要么以牺牲准确性为代价换取性能,要么以牺牲性能为代价换取准确性。
从性能权衡的角度来看,将每个主题的首帖纳入索引是否合理?或者,仅当主题在优化时间范围内有帖子时,才索引该主题的首帖?假设最后一种方案从数据库角度来看是可行的。
这在技术上是可行的,但问题极其棘手。
我担心,花上一周时间仔细调整索引来修正这个问题,其投入产出比可能并不划算。
此外,我还能想到许多特殊情况会让问题变得复杂(例如,拥有大量短帖子的论坛)。
我们不妨先观望一段时间,看看这个问题出现的频率。
目前,我们可以为您的论坛做一个临时的调整:将最近索引的大小翻倍。这是可配置的(@tgxworld 或许可以帮忙实现)。
谢谢!如果你觉得这样做是安全的,那就太好了!
这件事最终落实了吗?现在搜索之前提到的话题会跳转到第 523 篇帖子,而不是第 511 篇,这似乎表明越来越多的帖子超出了索引范围。
嗨,Sean,抱歉之前没有提到。
我刚将 SiteSetting.search_recent_posts_size 改为 250k,而你们只有 163k 个主题。更改生效需要几天时间,因为需要运行一个定时任务。
我相信这些更改已经生效了。我之前将其改为一百万,但忘记在这里发布更新。
@sam 我们是否计划在未来解决这一问题?将首帖全部纳入部分索引似乎是一个不错的权衡。根据之前的讨论,我知道 @codinghorror 认为搜索应优先处理主题,然后再显示主题内的帖子。