SQL Server全文搜索:一对多关系

时间:2015-12-18 16:11:54

标签: sql sql-server full-text-search one-to-many

我正在尝试从符合搜索匹配的故障单中检索数据。这里的相关数据位是票证具有名称,以及任意数量的注释

目前,我正在将搜索与票证名称匹配,如下所示:

char(13)

全文目录中的[key]等于TIC_PK。

这适合我,并且可以访问s1。排名,这对我来说非常重要。

现在我的问题是这种方法不适用于票搜索,因为评论目录中的键是注释PK,不会给我任何可以用来链接票证的信息。

我对如何搜索多个描述并仍然获得有意义的排名感到非常困惑。 我很清楚全文搜索,可能会遗漏一些明显的东西。

这是我目前尝试获得我所需要的东西:

JOIN freetexttable(Tickets,TIC_Name,'Test ') s1
    ON TIC_PK = s1.[key]

这会让我获得与搜索匹配的评论的门票,但我认为不可能使用此方法按排名数据freetexttable返回。

1 个答案:

答案 0 :(得分:1)

要同时搜索名称和评论并获得最有意义的排名,您应将所有这些信息放入同一表 - 一个新表 - 通过现有表填充ETL过程。

新表可能如下所示:

CREATE TABLE TicketsAndDescriptionsETL (
   TIC_PK int,
   TIC_Name varchar(100),
   All_DES_Descriptions varchar(max),
   PRIMARY KEY (TIC_PK)
)
GO

CREATE FULLTEXT INDEX ON TicketsAndDescriptionsETL (
   TIC_Name LANGUAGE 'English',
   All_DES_Descriptions LANGUAGE 'English'
)

安排此表通过SQL作业,Tickets和TicketDescriptions表上的触发器或数据层中的某些挂钩来填充。对于具有多个TicketDescriptions记录的故障单,请将所有这些评论的文本合并到All_DES_Descriptions列中。

然后针对这个新表运行全文搜索。

虽然这种方法确实为机器添加了另一个cog,但实际上没有其他方法可以跨多个表执行全文搜索并生成一个等级。