2017-09-27 45 views
3

比方說,我們有一個Employees表,其中有Note字段上的全文索引。 我們可以通過這樣的搜索查詢該表:SELECT ID FROM Employees WHERE CONTAINS(Note, 'scout')如果底層表已被索引,我們爲什麼需要全文索引

然而,如果我們創建爲SELECT ID, Note FROM Employees簡單的東西的EmployeesView,我們無法查詢與SELECT ID FROM EmployeesView WHERE CONTAINS(Note, 'scout')

該查詢該視圖將提高以下錯誤:

Cannot use a CONTAINS or FREETEXT predicate on table or indexed view 'EmployeesView' because it is not full-text indexed.

我想了解爲什麼它是不可能的,以便對其基礎表上運行FTS像它對於其他常規指標?

注#1這個問題不是關於如何在視圖上創建全文索引,因爲這已經是answered。這個問題是爲了理解我們爲什麼必須這樣做。

注#2我們的數據庫比所提供的例子更復雜。我們有許多視圖使用相同的全文索引表,一些可以被索引,而另一些則不可以,因爲模式綁定限制。如果每個視圖都相同,我也認爲它有點奇怪(並且存在巨大的磁盤空間浪費)以將FTI添加到每個視圖中。

回答

0

對於我自己的問題(我不會接受它),這不是真正的答案,但對於任何正在尋找解決方法的人來說,您可以在視圖上使用全文搜索而無需在其上創建FTI,

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')) 
可以通過使用內表和視圖之間JOIN做
相關問題