加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 在SQL Server 2008中跨多个表,列使用全文搜索

发布时间:2020-12-12 16:45:50 所属栏目:MsSql教程 来源:网络整理
导读:我需要使用全文搜索在数据库中的两个表中搜索多个列.这两个表格有相关列全文索引. 我选择全文搜索的原因: 能够轻松搜索重音字词(cafè) 2.能够根据单词近似等级排列 “你的意思是XXX吗?”功能 这是一个虚拟桌面结构,以说明挑战: Table Book BookIDName (Fu
我需要使用全文搜索在数据库中的两个表中搜索多个列.这两个表格有相关列全文索引.

我选择全文搜索的原因:
能够轻松搜索重音字词(cafè)
2.能够根据单词近似等级排列
“你的意思是XXX吗?”功能

这是一个虚拟桌面结构,以说明挑战:

Table Book
BookID
Name (Full-text indexed)
Notes (Full-text indexed)

Table Shelf
ShelfID
BookID

Table ShelfAuthor
AuthorID
ShelfID

Table Author
AuthorID
Name (Full-text indexed)

我需要搜索书名,书籍和作者姓名.

我知道有两种方法可以实现这一点:

>使用全文索引视图:这将是我的首选方法,但我不能这样做,因为为了全文索引的视图,它需要是schemabound,没有任何外部联接,具有唯一的指数.我需要获取我的数据的视图不能满足这些约束(它包含许多其他连接的表,我需要从中获取数据).
>在存储过程中使用连接:这种方法的问题是我需要按排序排序结果.如果我在表中进行多个连接,则默认情况下,SQL Server将不会搜索多个字段.我可以在两个链接表中组合两个单独的CONTAINS查询,但是我不知道从两个搜索查询中提取组合等级的方法.例如,如果我搜索“Arthur”,则应该考虑书查询和作者查询的结果,并相应加权.

解决方法

使用FREETEXTTABLE,您只需要设计一些算法来计算每个连接表结果的合并排名.下面的例子将结果从书桌的命中偏移.
SELECT b.Name,a.Name,bkt.[Rank] + akt.[Rank]/2 AS [Rank]
FROM Book b
INNER JOIN Author a ON b.AuthorID = a.AuthorID
INNER JOIN FREETEXTTABLE(Book,Name,@criteria) bkt ON b.ContentID = bkt.[Key] 
LEFT JOIN FREETEXTTABLE(Author,@criteria) akt ON a.AuthorID = akt.[Key]
ORDER BY [Rank] DESC

请注意,我简化了该示例的模式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读