【问题标题】:"Similar Posts" like functionality using MS SQL Server?使用 MS SQL Server 的“类似帖子”之类的功能?
【发布时间】:2010-09-07 13:02:12
【问题描述】:

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

"Articles (ArticleID, ArticleTitle, ArticleContent)"

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

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

【问题讨论】:

    标签: sql sql-server database


    【解决方案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 语句,以根据您的数据改进列表。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-22
          • 1970-01-01
          • 2014-11-27
          • 2018-09-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-13
          相关资源
          最近更新 更多