继续讨论 当标题匹配搜索词时,搜索结果应优先显示话题的首帖:
这完全偏离了原始讨论的主题,但我不确定自己是仅仅感到惊讶,还是彻底震惊:
(强调部分为我所加)
我无意质疑数据库的选择,因为我在这一领域毫无经验,但这句话暗示 Postgres 在内部并不区分这些情况。这种限制在数据库文本搜索引擎中常见吗?如果是这样,那就能很好地解释为什么大多数网站搜索功能都糟糕透顶了……
继续讨论 当标题匹配搜索词时,搜索结果应优先显示话题的首帖:
这完全偏离了原始讨论的主题,但我不确定自己是仅仅感到惊讶,还是彻底震惊:
(强调部分为我所加)
我无意质疑数据库的选择,因为我在这一领域毫无经验,但这句话暗示 Postgres 在内部并不区分这些情况。这种限制在数据库文本搜索引擎中常见吗?如果是这样,那就能很好地解释为什么大多数网站搜索功能都糟糕透顶了……
让我澄清一下这个说法。对于精确匹配,无需对结果进行排序,因为要么匹配,要么不匹配。对于部分匹配,我们该如何决定哪些结果应该排在前面?
以上所有标题都包含搜索词,因此问题在于如何对结果进行排序?目前我们依赖 PostgreSQL 的排序函数来为我们确定这一点。
排序尝试 旨在衡量文档与特定查询的相关性,以便在存在大量匹配项时,将最相关的结果优先显示。PostgreSQL 提供了两个预定义的排序函数,它们考虑了词汇、邻近性和结构信息;也就是说,它们会考虑查询词在文档中出现的频率、这些词在文档中的接近程度,以及它们所在的文档部分的重要性。然而,“相关性”的概念较为模糊,且非常依赖于具体应用场景。不同的应用可能需要额外的信息进行排序,例如文档修改时间。内置的排序函数仅作为示例。您可以编写自己的排序函数,和/或将它们的结果与其他因素结合,以满足您的特定需求。
PostgreSQL 会考虑许多因素,但最终排序仍然有些模糊,并且很大程度上取决于各个网站的具体情况,尤其是论坛内容的结构方式。我们在此(Discourse)的目标是提供一个良好的默认方案,使其适用于大多数论坛。
啊……看来可能是我这边有些误解。我以为您的意思是数据库无法区分“完全匹配”和“包含匹配”。
在我们最初讨论的关于在主题标题中优先排序匹配的语境下:
如果您担心顶部搜索结果会被“标题”匹配淹没,那么仅在搜索词达到最低复杂度级别时才启用标题搜索。目标是让顶部搜索结果中最多出现 4 到 5 个“标题”匹配。(不过我意识到这可能很难实现)