【发布时间】:2012-03-22 05:25:34
【问题描述】:
我正在使用 SQL Server 2008 开展一个项目,我认为全文搜索是最好的方法。我一直在尽可能多地阅读它,并且非常了解 hos 为一张桌子设置它。但是我不完全确定如何在我的场景中设置它 - 想象一下下面的表结构:
图书
- Id
- Title
- Description
图书作者
- BookId
- AuthorId
作者
- Id
- Name
如您所见,数据库包含一个包含书籍的表,每本书可以没有、一个或多个作者。每个作者也可以是一本书、一本或多本书的一部分——即Book 和Author 表具有多对多关系,由链接表BookAuthor 处理。
此时我想要完成的是一个搜索工具,可以根据用户提供的搜索字符串来查找匹配的书籍。因此,如果用户输入Brown,我想查找以下任一列中包含单词Brown 的所有书籍:
Book.Title
Book.Description
Author.Name
本质上,我想要一个结果集,包括标题为Brown Bear 的书和作者Dan Brown 写的书。如果有任何关于我应该如何设置的建议,我非常感谢您的意见!
(作为旁注,一旦我有这个过滤工作,查询结果也需要是可排序和可分页的,通过 @SortOrder、@PageIndex 和 @PageSize 处理传递到存储过程 -但我想这可能是一个单独的问题!)
【问题讨论】:
-
为什么你认为全文搜索在这里是一个不错的解决方案?对我来说,这看起来就像普通的数据库设计。
-
@TomTom 如上所述搜索“Brown”只是我想要实现的一个简化示例。我需要能够搜索 x 个单词,并且使用 LIKE 将不起作用。我们将来还希望能够找到几乎匹配的行,这将需要全文搜索(据我所知)。
-
@AdrianIftode 是的,我看过那个,如果这被认为是重复的,我深表歉意。正如那里的第二个答案所述,我没有发现接受的答案可以解决问题。线程中的另一个建议是在 Book-table 中构建一个额外的列,其中包含我认为可以工作的所有可搜索数据,但会很麻烦且不规范化,所以我很好奇是否有人有任何其他建议。
-
@Iskariot 很遗憾,我无法撤消最后的投票。我不知道这些观点,看起来很有希望
标签: sql-server sql-server-2008 tsql full-text-search