让我澄清一下这个说法。对于精确匹配,无需对结果进行排序,因为要么匹配,要么不匹配。对于部分匹配,我们该如何决定哪些结果应该排在前面?
- 这是我的搜索词
- 搜索词很有趣
- 由于标题更长,这里的搜索词更有趣
以上所有标题都包含搜索词,因此问题在于如何对结果进行排序?目前我们依赖 PostgreSQL 的排序函数来为我们确定这一点。
排序尝试 旨在衡量文档与特定查询的相关性,以便在存在大量匹配项时,将最相关的结果优先显示。PostgreSQL 提供了两个预定义的排序函数,它们考虑了词汇、邻近性和结构信息;也就是说,它们会考虑查询词在文档中出现的频率、这些词在文档中的接近程度,以及它们所在的文档部分的重要性。然而,“相关性”的概念较为模糊,且非常依赖于具体应用场景。不同的应用可能需要额外的信息进行排序,例如文档修改时间。内置的排序函数仅作为示例。您可以编写自己的排序函数,和/或将它们的结果与其他因素结合,以满足您的特定需求。
PostgreSQL 会考虑许多因素,但最终排序仍然有些模糊,并且很大程度上取决于各个网站的具体情况,尤其是论坛内容的结构方式。我们在此(Discourse)的目标是提供一个良好的默认方案,使其适用于大多数论坛。