搜索结果应优先显示标题与搜索词匹配的主题首帖

那么,在搜索索引中是否完全无法判断某帖子是否为第一个帖子?

那如果做如下调整呢:

当一个主题中的多个帖子匹配某个搜索词时,且其中有一个帖子是第一个帖子,则给该特定帖子(即第一个帖子)在搜索排名中大幅提升。

这样既能避免机械地“按帖子编号排序”的行为,又能正确地将第一个帖子置于优先位置,你觉得如何?

2 个赞

目前确实不行,但这并不难实现,因为这与去年我进行的一项优化类似,当时我们实现了按私信(PM)或非私信来过滤 PostSearchIndex

2 个赞

我认为,在话题内对重复内容进行精确排序的理论优势弊大于利。

  • 用户可能将搜索用作书签,当原本总是跳转到第 77 条的搜索现在跳转到第 892 条时,他们会感到困惑。

  • 火上浇油的是,我们目前没有“跳转到话题中第一条未读内容”的机制,因此优先展示靠后的帖子会带来一个重大弊端:更有可能造成阅读断层(例如:你读了 1、2、3,但没读 4 到 88……现在你看到了 89)。

我更喜欢无条件地优先展示话题中的第一条内容,这样解释起来更简单,也稳定得多。

5 个赞

我同意,这个方案对我有效 :+1:

4 个赞

我们是使用第一个匹配项的排名,还是使用该主题中最佳帖子的排名?我们之前采用的是后者,但这似乎不正确,因为我们拿一个不会出现在搜索结果中的帖子的排名,去与其他主题的帖子进行排名比较。

3 个赞

我认为,在链接时我们应使用 MIN(post_number),而在进行聚合操作时,我们应基于 MAX(rank) 进行排名。

3 个赞

新行为已在以下链接中回滚:

5 个赞

本主题已在 6 天后自动关闭,不再接受新回复。

感谢重新开启此话题。我认为与此相关的问题仍然存在。在 https://community.wanikani.com 上,有一个题为“General Anime Thread”的帖子。如果我搜索“general anime”,该帖子会作为首要结果出现,但链接却指向 第 511 楼。特别奇怪的是,该楼层的内容中甚至不包含“general”或“anime”这两个词。因此,这种情况似乎比最初报告的问题还要严重。据我所知,https://community.wanikani.com 应该已经部署了包含此修复的版本。

再举一个例子,如果我搜索“japanese book club”,会跳转到该话题的 第 925 楼,尽管搜索词实际上就出现在该话题的标题中。

我尝试在 meta 站点复现此问题,但未能成功。不过,这可能只是因为我尝试搜索的特定术语导致的。

4 个赞

您是否通过查看源代码检查了版本?如果此处无法复现,很可能是版本不匹配。

1 个赞

这是来自页面源代码的信息:

Discourse 2.7.0.beta4 - https://github.com/discourse/discourse 版本 47835ade9a3dcebb14bdd744e92d93b9c9199b90

该提交是两天前的,我仍然可以用我上一篇文章中的示例复现此问题。

3 个赞

感谢如此详细的报告,@tgxworld 会快速查看一下!

4 个赞

@sam 我明白这是怎么回事。我们在大型网站上实施了搜索性能优化,仅对部分索引进行搜索。由于首帖非常古老,它未被包含在部分索引中,这就是我们未链接到首帖的原因。我需要仔细考虑修复方案,因为目前我想到的方案要么以牺牲准确性为代价换取性能,要么以牺牲性能为代价换取准确性。

3 个赞

从性能权衡的角度来看,将每个主题的首帖纳入索引是否合理?或者,仅当主题在优化时间范围内有帖子时,才索引该主题的首帖?假设最后一种方案从数据库角度来看是可行的。

3 个赞

这在技术上是可行的,但问题极其棘手。

我担心,花上一周时间仔细调整索引来修正这个问题,其投入产出比可能并不划算。

此外,我还能想到许多特殊情况会让问题变得复杂(例如,拥有大量短帖子的论坛)。

我们不妨先观望一段时间,看看这个问题出现的频率。

目前,我们可以为您的论坛做一个临时的调整:将最近索引的大小翻倍。这是可配置的(@tgxworld 或许可以帮忙实现)。

4 个赞

谢谢!如果你觉得这样做是安全的,那就太好了!

3 个赞

这件事最终落实了吗?现在搜索之前提到的话题会跳转到第 523 篇帖子,而不是第 511 篇,这似乎表明越来越多的帖子超出了索引范围。

2 个赞

嗨,Sean,抱歉之前没有提到。

我刚将 SiteSetting.search_recent_posts_size 改为 250k,而你们只有 163k 个主题。更改生效需要几天时间,因为需要运行一个定时任务。

4 个赞

我相信这些更改已经生效了。我之前将其改为一百万,但忘记在这里发布更新。

@sam 我们是否计划在未来解决这一问题?将首帖全部纳入部分索引似乎是一个不错的权衡。根据之前的讨论,我知道 @codinghorror 认为搜索应优先处理主题,然后再显示主题内的帖子。

3 个赞