涉及2个表的全文搜索

时间:2010-04-20 14:40:03

标签: sql-server-2005 full-text-search

我非常喜欢全文搜索,我被告知要对2个表进行全文搜索并按相关性对结果进行排序。

我将查看表格“帖子”和表格“PostComments”。我必须在Posts.Description,Posts.Title和PostComments.Comments上查找搜索词(比如说“AnyWord”)。

我必须按相关性返回帖子顺序,但由于我正在查看帖子和帖子后评论,我不知道这是否有意义。我说我需要在同一张桌子上的所有信息才能按相关性排序。

你能帮助我弄清楚这是否有意义,以及它是否如何实现它?

修改

我会尝试更好地解释我需要什么。

如果搜索的字词出现在标题,说明或任何相关的帖子评论中,则帖子与搜索相关。

但在前端我会显示一个帖子列表。此列表中帖子的标题是帖子本身的链接。帖子评论在那里可见,但在搜索结果列表中没有,尽管它们涉及搜索过程。

所以你可以在搜索结果上找到与JUST匹配的帖子,因为搜索词出现在一个或多个评论上

1 个答案:

答案 0 :(得分:1)

ContainsTable返回相关性评估。您没有提到需要返回的内容,因此我只返回了存储值的表的名称以及给定表的主键(您可以将“PrimaryKey”替换为您的实际主键列名称,例如PostId或PostCommentsId) ,价值及其等级。

Select Z.TableName, Z.PK, Z.Value, Z.Rank
From    (
        Select  'Posts' As TableName, Posts.PrimaryKey As PK, Posts.Description As Value, CT.Rank
        From Posts
            Join ContainsTable( Posts, Description, 'Anyword' ) As CT
                On CT.Key = Posts.PrimaryKey
        Union All
        Select  'PostComments', PostComments.PrimaryKey,  PostComments.Comments, CT.Rank
        From PostComments
        Join ContainsTable( PostComments, Comments, 'Anyword' ) As CT
                On CT.Key = PostComments.PrimaryKey
        ) As Z
Order By Z.Rank Desc

编辑鉴于附加信息,它更加清晰。首先,看起来搜索的排名与结果无关。因此,所有必要的是在帖子信息的搜索和PostComments上的搜索之间使用OR:

Select ...
From Posts
Where Contains( Posts.Description, Posts.Title, 'searchterm' )
    Or Exists   (
                Select 1
                From PostComments
                Where PostComments.PostId = Posts.Id
                    And Contains( PostComments.Comments, 'searchterm' )
                )