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

时间:2008-09-02 11:12:35

标签: sql sql-server database

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

的表中
"Articles (ArticleID, ArticleTitle, ArticleContent)"

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

是否可以在MS SQL Server 2005中执行此操作?

3 个答案:

答案 0 :(得分:1)

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

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子句中添加/删除case语句,以根据您的数据改进列表。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

我认为问题是“相似”对你意味着什么。如果您为用户创建了一个输入某种标签的字段,那么查询就会变得容易得多。