【问题标题】:How to compare a tsvector against another tsvector?如何比较一个 tsvector 和另一个 tsvector?
【发布时间】:2025-12-26 17:15:07
【问题描述】:

我正在尝试获取给定记录的“可能相关”记录。

桌子上有一个 tsvector (tsv),所以我正在考虑如何将源 tsv 转换为 tsquery 格式,然后像普通排名搜索一样找到最密切相关的匹配项。

SELECT title,
    link,
    IMAGE,
    intro,
    created_at,
    updated_at,
    ts_rank_cd(tsv, q.match::tsquery) AS rank
FROM items,
    (
        SELECT tsv AS match
        FROM items
        WHERE id = 1234
        ) AS q
WHERE id <> 1234
ORDER BY rank DESC LIMIT 10;

有没有很好的方法来实现这一点?

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    我四处寻找,似乎没有一种简单的方法可以做到这一点。我认为要有效地做到这一点,您可能需要自己的 C 函数,它可以提供从一个 tsvector 到另一个的距离(然后您可以使用 KNN 搜索)。

    无论哪种方式,都不是很容易做到这一点,而且可能需要大量的工作,但它似乎应该是一个普遍适用的问题,因此一般社区可能会对解决方案感兴趣。

    请注意,这并不像听起来那么简单。假设我写了一本关于阿尔伯特·洛德的故事歌手和他对诗歌公式的强调的书。假设我称它为“艾伯特勋爵和文字之戒”。这将创建一个 Albert:1 Lord:2 Ring:5 Words:7 的 tsvector,指环王是 Lord:2 Ring:5,这会产生一种非常错误的相似感。如果您涉及任何分类,您也希望利用它。

    【讨论】:

      最近更新 更多