我们假设我们在Employees
字段上有一个Note
表,其中包含全文索引。
我们可以使用如下查询搜索该表:SELECT ID FROM Employees WHERE CONTAINS(Note, 'scout')
但是,如果我们使用EmployeesView
这样简单的内容创建SELECT ID, Note FROM Employees
,我们就无法使用SELECT ID FROM EmployeesView WHERE CONTAINS(Note, 'scout')
该查询会引发以下错误:
不能在表或索引视图上使用CONTAINS或FREETEXT谓词' EmployeesView'因为它不是全文索引。
我想理解为什么视图对其基础表运行FTS是不可能的,就像对其他常规索引一样?
注意#1 这个问题并不是关于如何在视图上创建全文索引,因为它已经是answered。这个问题是为什么我们必须这样做。
注意#2 我们的数据库比提供的示例更复杂。我们使用相同的全文索引表有很多视图,有些可以被索引而有些则不能,因为模式绑定限制。我还认为,如果每个视图中的FTI都相同,那么将FTI添加到每个视图中会有点奇怪(以及巨大的磁盘空间浪费)。
答案 0 :(得分:1)
这不是我自己问题的答案(我不会接受)但是对于那些正在寻找一种解决方案的人来说,你可以在视图上使用全文搜索而不在其上创建FTI,你可以通过在表和视图之间使用INNER JOIN来实现:
SELECT * FROM EmployeesView INNER JOIN Employees ON EmployeesView.ID = Employees.ID
WHERE CONTAINS(Employees.Note, 'scout')
或使用WHERE IN
子句:
SELECT * FROM EmployeesView
WHERE ID IN (SELECT ID FROM Employees WHERE CONTAINS(Note, 'scout'))