我正在尝试获取给定记录的“可能相关”记录。
桌面上有一个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;
有没有很好的方法来实现这个目标?
答案 0 :(得分:0)
我做了一些探索,似乎没有一种简单的方法可以做到这一点。我认为要有效地做到这一点你可能需要你自己的C函数,这些函数可以提供从一个tsvector到另一个tsvector的距离(然后你可以使用KNN搜索)。
无论哪种方式都没有一种非常简单的方法可以做到这一点,这可能是一项重要的工作,但它似乎应该是一个普遍适用的问题,因此一般社区可能对解决方案感兴趣。
请注意,这并不像听起来那么简单。假设我写了一本关于艾伯特·洛德的故事歌手和他对诗歌公式的强调的书。假设我把它称为“阿尔伯特勋爵和言语之环”。这将创造一个Albert:1 Lord:2 Ring:5 Words:7
的指针,指环王Lord:2 Ring:5
会产生一种非常错误的相似感。如果您涉及任何分类,您也希望利用它。