【问题标题】:FullText Search using multiple tables in SQL在 SQL 中使用多个表进行全文搜索
【发布时间】:2009-10-15 13:45:20
【问题描述】:

我有 3 张桌子,

  1. tblBook(BookID, ISBN, Title, Summary)
  2. tblAuthor(AuthorID, FullName)
  3. tblBookAuthor(BookAuthorID, BookID, AuthorID)

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

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

【问题讨论】:

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


    【解决方案1】:

    您可以在 tblAuthor 上运行另一个 SELECT/CONTAINSTABLE 查询,将结果合并在一起,然后用另一个查询包装,该查询对 Key 列上的 Rank 求和,以删除任何重复项,并将 tblBook 和 tblAuthor 匹配更高的结果推送。

    我认为这将实现您正在尝试做的事情。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        • 2023-04-04
        • 1970-01-01
        相关资源
        最近更新 更多