gpt4 book ai didi

sql-server - SQL Server 全文搜索 - 多对多关系

转载 作者:行者123 更新时间:2023-12-03 00:35:57 25 4
gpt4 key购买 nike

我正在开发一个使用 SQL Server 2008 的项目,我认为全文搜索是最好的方法。我一直在尽可能多地阅读它,并且非常了解如何为单个表设置它。但是我不完全确定如何根据我的场景进行设置 - 想象一下下面的表结构:

预订

- Id
- Title
- Description

图书作者

- BookId
- AuthorId

作者

- Id
- Name

如您所见,数据库包含一个包含书籍的表,每本书可以没有作者、一个或多个作者。每个作者也可以不属于、属于一本或多本书籍 - 即 BookAuthor表具有多对多关系,通过链接表 BookAuthor 处理.

此时我想要完成的是一个搜索工具,可以根据用户提供的搜索字符串查找匹配的书籍。因此,如果用户输入 Brown我想找到以下任一列包含单词 Brown 的所有书籍:

Book.Title
Book.Description
Author.Name

本质上,我想要一个书籍结果集,包括标题为 Brown Bear 的书。以及作者写的书Dan Brown 。如果有人对我应该如何设置有任何建议,我非常感谢您的意见!

(作为旁注,一旦我使此过滤工作正常,查询结果还需要可排序和可分页,通过 @SortOrder@PageIndex@PageSize 传递到存储过程 -但我想这可能是一个单独的问题!)

最佳答案

CONTAINS 谓词可以将要搜索的列列表作为其第一个参数;但是,这些列必须来自单个表。您有多种选择可以绕过此限制。一种选择是您可以执行两次单独的搜索,每个表一次,然后将结果合并在一起。

select Id, Title from Book where contains([Description], 'brown')
union
select b.Id, b.Title
from Book b inner join BookAuthor ba on b.Id = ba.BookId
inner join Author a on a.Id=ba.AuthorId
where contains([Name], 'brown')

另一个选择是利用 FTS indexes can be created on indexed views 的事实。为此,请创建一个索引 View ,其中包含 Book 表中的 Title 字段和 Author 表中的 Name 字段,然后在 View 中的这两列上创建 FTS 索引。然后您可以针对该 View 编写查询,如下所示:

select BookId, Title from vw_BooksAndAuthors 
where contains(([Description], [Name]), 'brown')

关于sql-server - SQL Server 全文搜索 - 多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9554809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com