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

前端之家收集整理的这篇文章主要介绍了sql-server – 在SQL Server 2008中跨多个表,列使用全文搜索前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要使用全文搜索数据库中的两个表中搜索多个列.这两个表格有相关列全文索引.

我选择全文搜索的原因:
能够轻松搜索重音字词(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

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

猜你在找的MsSQL相关文章