【问题标题】:Full text search involving 2 tables涉及2个表格的全文搜索
【发布时间】:2010-04-20 14:40:02
【问题描述】:

我对全文搜索非常陌生,有人告诉我对 2 个表格进行全文搜索并按相关性对结果进行排序。

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

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

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

编辑

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

如果搜索词出现在标题、描述或任何相关的 PostComments 上,则帖子与搜索相关。

但在前端我会显示一个帖子列表。此列表中的帖子标题是指向帖子本身的链接。帖子 cmets 在那里可见,但不在搜索结果列表中,尽管它们参与了搜索过程。

因此,您可以在搜索结果上发布匹配的帖子,因为搜索词出现在一个或多个 cmets 上

【问题讨论】:

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


    【解决方案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' )
                    )
    

    【讨论】:

    • @Thomas,感谢您的帮助!也许我不够清楚,但搜索必须返回 POSTS。结果将按相关性显示在 POSTS 顺序列表中。
    • @Timmy O' Tool - 那么 PostComments 如何适合这个等式呢? Posts 和 PostComments 有什么关系?
    • @Timmy O' 工具 - 在 PostComments 中找到的值的排名如何解决这个问题?如果您能展示一个您期望返回的示例,将会有所帮助。
    • 感谢您的耐心等待。我添加了更多细节。也许我解释得不够好。也许我想做的事情没有意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 2016-01-01
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    相关资源
    最近更新 更多