2

我有一张桌子posts

CREATE TABLE posts (
  id serial primary key,
  content text
);

当用户提交帖子时,我如何将他的帖子与其他帖子进行比较并找到相似的帖子?
我正在寻找类似 StackOverflow 对“类似问题”所做的事情。

4

2 回答 2

5

虽然文本搜索是一个选项,但它主要不适用于此类搜索。典型的用例是根据字典和词干在文档中查找单词,而不是比较整个文档。

我确信 StackOverflow 已经在相似性搜索中加入了一些聪明才智,因为这不是一件小事

使用pg_trgm模块提供的相似性函数和运算符,您可以获得一半不错的结果:

SELECT content, similarity(content, 'grand new title asking foo') AS sim_score
FROM   posts
WHERE  content  % 'grand new title asking foo'
ORDER  BY 2 DESC, content;

请务必为此设置一个GiST索引content

但你可能需要做更多的事情。在识别新内容中的关键字后,您可以将其与文本搜索结合使用..

于 2013-07-24T20:33:25.793 回答
0

You need to use Full Text Search in Postgres.

http://www.postgresql.org/docs/9.1/static/textsearch-intro.html

于 2013-07-24T19:14:23.180 回答