一尘不染

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

sql

我在MS SQL Server 2005数据库的“ Articles-”表中存储了大量文章。

"Articles (ArticleID, ArticleTitle, ArticleContent)"

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

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


阅读 172

收藏
2021-03-10

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

2021-03-10