使用标点符号搜索时体验不稳定

例如,搜索 it, it:“it, it:”“it, it:”,"it, it:",it, it:”。虽然 这篇帖子 中确实包含 “it, it:”,但搜索时并未将其显示出来。[1]

另外,按下搜索按钮时,引号 “” 会被转换为 ""。我不喜欢这种体验,不确定这是否是 bug。

平台:Android 上的 Edge 浏览器,try.discourse.org,在安全模式下可复现


  1. 以防帖子被自动删除:测试帖内容为:It, “it, it:”, it, oandnxkwbs. ↩︎

我认为 it 是一个在搜索中被排除的停用词。你是否尝试过用一个不在该列表中的单词来复现这个问题,以确认这是否与标点符号有关?

我无法以其他方式复现该问题。也许我看到问题的论坛使用的 Discourse 版本已过时。

实际上,我认为我可以再次复现这个问题。尝试搜索 we don't 可以找到 这篇帖子

而搜索 “just-use-interface{}/object; we don’t need generics”"just-use- interface{} / object ; we don't need generics" 则找不到它。

但搜索 just-use- interface{} / object ; we don't need generics 却可以找到它。

是的,这是正确的……你根本无法搜索 it……如果你在这里尝试搜索,不会得到任何结果。那些极有可能出现极高频次的词(如 I、the、a、代词等)会被排除在索引之外,因为它们出现得太频繁,无法提供有意义的区分度。

这里也一样,wedon't(技术上来说是 dont)没有被索引

这种情况有点不同……对于:

"just-use- interface{} / object ; we don't need generics"

这永远不会起作用,因为引号要求完全匹配,而空格的存在使其不再是完全匹配

对于搜索:

"just-use-interface{}/object; we don't need generics"

原帖文本中包含一个花哨的引号(don’t),但搜索会将其去除,因此你无法返回一个完全匹配的结果……这意味着帖子内容和搜索并不完全对称,这可能是一个可以改进的地方

这是因为在没有引号的情况下,你并不是在搜索完全匹配,所以它会提取 “interface”、“object”、“need” 和 “generics” 这些词,而该帖子是这些词的最佳匹配结果

我发现即使搜索一些很简单的词汇,也很难找到我想要的话题。这个问题之前有人提过,而且几年前还做过一次 Typesense 集成的实验。

我想知道是否真的有计划来改进 Discourse 的搜索功能?它是该平台上最受关注的功能之一,我觉得它需要一些重构和更多的优化。

也许可以添加一个“纯文本搜索”选项?这样可以禁用像 "" 引号这类容易出错的功能。

我很好奇,排除“we”和“don’t”(don, t)不被纳入搜索索引,是否有技术上的原因?是因为它们太常见了吗?

是的,完全正确

停用词(Stop words)是指那些非常常见、几乎出现在每篇文档中且没有区分价值的词。因此,在全文搜索的上下文中,它们可以被忽略。例如,每个英文文本都包含像 athe 这样的词,因此将它们存储在索引中是没有用的。

PostgreSQL: Documentation: 18: 12.6. Dictionaries