我非常喜欢全文搜索,我被告知要对2个表进行全文搜索并按相关性对结果进行排序。
我将查看表格“帖子”和表格“PostComments”。我必须在Posts.Description,Posts.Title和PostComments.Comments上查找搜索词(比如说“AnyWord”)。
我必须按相关性返回帖子顺序,但由于我正在查看帖子和帖子后评论,我不知道这是否有意义。我说我需要在同一张桌子上的所有信息才能按相关性排序。
你能帮助我弄清楚这是否有意义,以及它是否如何实现它?
修改
我会尝试更好地解释我需要什么。
如果搜索的字词出现在标题,说明或任何相关的帖子评论中,则帖子与搜索相关。
但在前端我会显示一个帖子列表。此列表中帖子的标题是帖子本身的链接。帖子评论在那里可见,但在搜索结果列表中没有,尽管它们涉及搜索过程。
所以你可以在搜索结果上找到与JUST匹配的帖子,因为搜索词出现在一个或多个评论上
答案 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' )
)