喜欢使用MS SQL Server的“类似帖子”吗?

喜欢使用MS SQL Server的“类似帖子”吗?

“Similar Posts” like functionality using MS SQL Server?

我在MS SQL Server 2005数据库中有很多文章存储在名为Articles-的表中

1
"Articles (ArticleID, ArticleTitle, ArticleContent)"

现在,我需要一些SP或SQL查询,这些查询可以针对任何用户的输入向我返回类似的文章(非常类似于博客中的"类似帖子"或stackoverflow中的"相关问题")。 匹配应同时适用于ArticleTitle和ArticleContent。 查询应该足够智能,可以根据它们的相关性对结果进行排序。

在MS SQL Server 2005中可以做到这一点吗?


这样的事情可能会起作用,这是一种排名系统。 您可能必须在应用程序中拆分字符串才能构建SQL字符串,但是我使用了类似的方法来构建有效的站点搜索。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SELECT
Top 10
ArticleID,
ArticleTitle,
ArticleContent
FROM
Articles
ORDER BY
(CASE WHEN ArticleTitle = 'Article Title' THEN 1 ELSE 0 END) DESC,
(CASE WHEN ArticleTitle = 'Article' THEN 1 ELSE 0 END) DESC,
(CASE WHEN ArticleTitle = 'Title' THEN 1 ELSE 0 END) DESC,
(CASE WHEN Soundex('Article Title') = Soundex(ArticleTitle) THEN 1 ELSE 0 END) DESC,
(CASE WHEN Soundex('Article') = Soundex(ArticleTitle) THEN 1 ELSE 0 END) DESC,
(CASE WHEN Soundex('Title') = Soundex(ArticleTitle) THEN 1 ELSE 0 END) DESC,
(CASE WHEN PatIndex('%Article%Title%', ArticleTitle) > 0 THEN 1 ELSE 0 END) DESC,
(CASE WHEN PatIndex('%Article%', ArticleTitle) > 0 THEN 1 ELSE 0 END) DESC,
(CASE WHEN PatIndex('%Title%', ArticleTitle) > 0 THEN 1 ELSE 0 END) DESC,
(CASE WHEN PatIndex('%Article%Title%', ArticleContent) > 0 THEN 1 ELSE 0 END) DESC,
(CASE WHEN PatIndex('%Article%', ArticleContent) > 0 THEN 1 ELSE 0 END) DESC,
(CASE WHEN PatIndex('%Title%', ArticleContent) > 0 THEN 1 ELSE 0 END) DESC

然后,您可以从order by子句中添加/删除案例语句,以根据数据改进列表。


我认为问题是"相似"对您意味着什么。 如果创建一个供用户输入某种标签的字段,则查询变得更加容易。


首先,您需要定义文章相似性的含义。
例如,您可以将一些元信息与文章(如标签)相关联。
为了能够找到相似的文章,您需要从中提取一些功能,例如,您可以建立全文索引。

您可以利用MSSQL 2005的全文本搜索功能

1
2
-- Assuming @Title contains title of current articles you can find related articles runnig this query  
SELECT * FROM Acticles WHERE CONTAINS(ArticleTitle, @Title)


推荐阅读