多表和多列的全文搜索

时间:2015-05-09 15:25:00

标签: sql full-text-search

我想对以下查询执行SQL Server全文搜索:

select distinct 
    Products.ProductID, Products.ProductCode, Products.PTitleF, 
    STUFF((SELECT distinct 
               ', ' + Author.AuFirstName + N'  ' + Author.AuLastName + N' '+
    ISNULL(Translator.FirstName,N' ')+N' '+ISNULL(Translator.LastName,N' 
  ')+N' '+p.PTitleF+N' '+ISNULL(Publishers.PName,N' ')
           FROM 
               Publishers 
           INNER JOIN  ProductPublisher ON 
Publishers.PublisherID = ProductPublisher.PublisherID 
           RIGHT OUTER JOIN
               ProductTranslator 
           INNER JOIN Translator ON 
ProductTranslator.TranslatorID = Translator.TranslatorID 
           RIGHT OUTER JOIN
               Products AS p ON 
ProductTranslator.ProductID = p.ProductID ON
ProductPublisher.ProductID = p.ProductID 
           LEFT OUTER JOIN
               ProductAuthor 
           INNER JOIN
               Author ON 
ProductAuthor.AuthorID = Author.AuthorID ON 
p.ProductID = ProductAuthor.ProductID
           WHERE
               Products.ProductID = p.ProductID     
           FOR XML PATH ('')), 1, 1, '') Authors
from 
    Products;

如您所见,我想将多个表中的某些字段合并为一个记录,以对它们执行全文搜索。

在这里实现目标的最佳方法是什么?

谢谢。

1 个答案:

答案 0 :(得分:1)

在进行搜索之前,请运行上面查询的SELECT部分​​,确保原始输出中提供了您要查找的所有数据。有了这么多的内部和外部连接,您可能正在消除您正在寻找的行。在你走得更远之前,这是一个很好的初步检查。

其次,我赞成查看这些列而不是STUFF。当然这取决于您的数据和需求,但我会首先尝试查看所有这些已加入的列。

接下来确保安装并配置了全文搜索:

  1. 确保在SQL Server上安装了全文搜索。它默认不安装,在SQL Express上不可用。 (您没有指定您的版本)

  2. 创建全文搜索目录以存储全文索引数据。

    创建FULLTEXT CATALOG foo;

  3. 如果这是唯一的全文目录,您可以将其指定为默认目录:

    CREATE FULLTEXT CATALOG foo AS DEFAULT;
    
    1. 为您要查找的表/列添加一些全文索引到全文搜索目录。您可以一次将这些索引设置为一个表。

      在dbo.Author上创建FULLTEXT索引(     AuFirstName LANGUAGE 1033,     AuLastName LANGUAGE 1033 )KEY INDEX [PK_dbo.Author] ON foo;

    2. 1033 表示全文搜索应使用英语词典,如果不正确,则需要查找所需语言的数字。

      全文索引表需要知道表的主键。我猜这个表的主键(PK)叫做 [PK_dbo.Author] 请确保将[PK_dbo.Author]替换为作者表的正确PK。

      您尚未准备好使用CONTAINS或FREETEXT关键字使用全文SQL查询搜索数据。