我需要使用全文搜索在数据库中的两个表中搜索多个列.这两个表格有相关列全文索引.
我选择全文搜索的原因:
能够轻松搜索重音字词(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
请注意,我简化了该示例的模式.