FullText在SQL中使用多个表进行搜索

时间:2009-10-15 13:45:21

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

我有3张桌子,

  1. tblBook(BookID, ISBN, Title, Summary)
  2. tblAuthor(AuthorID, FullName)
  3. tblBookAuthor(BookAuthorID, BookID, AuthorID)
  4. tblBookAuthor允许一本书有多位作者,作者可能已经写过任意数量的书籍。

    我使用全文搜索来搜索基于单词的排名:

    SET @Word = 'FORMSOF(INFLECTIONAL, "' + @Word + '")'
    
    SELECT 
      COALESCE(ISBNResults.[KEY], TitleResults.[KEY], SummaryResults.[KEY]) AS [KEY],
      ISNULL(ISBNResults.Rank, 0) * 3 +
      ISNULL(TitleResults.Rank, 0) * 2 +
      ISNULL(SummaryResults.Rank, 0) AS Rank
    FROM
      CONTAINSTABLE(tblBook, ISBN, @Word, LANGUAGE 'English') AS ISBNResults
      FULL OUTER JOIN 
        CONTAINSTABLE(tblBook, Title, @Word, LANGUAGE 'English') AS TitleResults 
        ON ISBNResults.[KEY] = TitleResults.[KEY]
      FULL OUTER JOIN
        CONTAINSTABLE(tblBook, Summary, @Word, LANGUAGE 'English') AS SummaryResults 
        ON ISBNResults.[KEY] = SummaryResults.[KEY] 
    

    上述代码可以正常搜索tblBook表。但现在我想根据搜索的关键词搜索表tblAuthor

    你能帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

你可以在tblAuthor上运行另一个SELECT / CONTAINSTABLE查询,将结果合并在一起,并用另一个查询进行换行,该查询对Rank列上的Rank进行求和以删除任何重复项,并将tblBook和tblAuthor匹配的结果推高。

我认为这将实现您正在尝试的东西。

答案 1 :(得分:3)

您可以创建一个组合表的视图,然后在其上创建一个全文索引。请参阅此博文:http://versia.com/2008/02/06/sql-server-full-text-searching-across-multiple-tables/