我正在尝试获取给定记录的“可能相关”记录。
表上有一个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;有没有一个很好的方法来实现这一点?
发布于 2013-12-01 17:29:07
我做了一些调查,似乎没有一个简单的方法来做到这一点。我认为为了有效地做到这一点,你可能需要你自己的C函数,它可以提供从一个tsvector到另一个tsvector的距离(然后你可以使用KNN搜索)。
无论哪种方式,都没有一种非常简单的方法来做到这一点,这可能是大量的工作,但它似乎应该是一个普遍适用的问题,所以一般社区可能会对解决方案感兴趣。
注意,这并不像听起来那么微不足道。假设我写了一本关于艾伯特·洛德的“故事的歌手”的书,以及他对诗歌公式的强调。假设我把它叫做“阿尔伯特·洛德和言辞之戒”这将创建一个Albert:1 Lord:2 Ring:5 Words:7的tsvector,指环王是Lord:2 Ring:5,这将创造一个非常错误的相似感。如果你涉及到任何分类,你也会想要利用它。
https://stackoverflow.com/questions/19557116
复制相似问题