The*_*urf 6 sql-server full-text-search sql-server-2016
假设我们有一个Employees表,其中的字段有全文索引Note。我们可以使用如下查询来搜索该表:SELECT ID FROM Employees WHERE CONTAINS(Note, 'scout')
但是,如果我们创建EmployeesView像这样简单的东西SELECT ID, Note FROM Employees,我们就无法使用查询该视图SELECT ID FROM EmployeesView WHERE CONTAINS(Note, 'scout')
该查询将引发以下错误:
无法对表或索引视图“EmployeesView”使用 CONTAINS 或 FREETEXT 谓词,因为它不是全文索引。
我想了解为什么视图无法像其他常规索引那样针对其基础表运行 FTS?
注意#1这个问题不是关于如何在视图上创建全文索引,因为这已经得到回答。这个问题就是要明白为什么我们要这么做。
注意#2我们的数据库比提供的示例更复杂。我们有许多视图使用相同的全文索引表,有些可以索引,而另一些则由于架构绑定限制而不能。我还认为,如果每个视图都相同,则向每个视图添加 FTI 有点奇怪(并且会浪费大量磁盘空间)。
这并不是我自己问题的真正答案(我不会接受它),但对于任何正在寻找解决方案的人来说,该解决方案允许您在视图上使用全文搜索而不在其上创建 FTI,您可以通过在表和视图之间使用 INNER JOIN:
SELECT * FROM EmployeesView INNER JOIN Employees ON EmployeesView.ID = Employees.ID
WHERE CONTAINS(Employees.Note, 'scout')
Run Code Online (Sandbox Code Playgroud)
或者使用WHERE IN子句:
SELECT * FROM EmployeesView
WHERE ID IN (SELECT ID FROM Employees WHERE CONTAINS(Note, 'scout'))
Run Code Online (Sandbox Code Playgroud)