sql - 如何将一个 tsvector 与另一个 tsvector 进行比较?

标签 sql postgresql

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

表上有一个 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;

有什么好的方法可以做到这一点吗?

最佳答案

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

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

请注意,这并不像听起来那么微不足道。假设我写了一本关于阿尔伯特·罗德的故事歌手及其对诗歌公式的强调的书。假设我称它为“Albert Lord and the Ring of Words”。这将创建一个 Albert:1 Lord:2 Ring:5 Words:7 的 tsvector,指环王是 Lord:2 Ring:5 这将创建一个非常错误的相似感。如果您涉及任何分类,您也希望利用它。

关于sql - 如何将一个 tsvector 与另一个 tsvector 进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19557116/

相关文章:

sql - 显示来自不同表的数据,并以摘要形式显示详细信息

mysql - 根据关联模型中的值对记录进行排序

Django ORM——重要的数据库变更/数据迁移

sql - 丢弃时间戳中的毫秒部分

postgresql - 如何避免 PostgreSQL JSON 数据类型中的重复值?

python - 在存在条件的数据库中查找非唯一值

mysql - 如何创建枢轴以避免 ID 重复?

c# - 从 C# 中的存储过程返回多个记录集

c# - SqlBulkCopy 在事务内部插入时阻止任何其他对表的写入

sql - PostgreSQL:选择 null 与 false 的性能