2011-12-13 40 views
7

我正在运行Sql Server 2008 R2,并且需要在内部连接的视图上启用全文搜索。我的问题是我不知道如何创建我的全文索引。使用内部连接在视图上启用全文搜索

当我使用全文索引向导时,出现此错误。

必须在此表/视图上定义一个唯一列。

为了让您更好地理解我的问题,请参阅以下w3school示例http://www.w3schools.com/sql/sql_join_inner.asp最后一个选择仅仅是我的看法。

PersonOrderView - View 
    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo 
    FROM Persons 
    INNER JOIN Orders 
    ON Persons.P_Id=Orders.P_Id 
    ORDER BY Persons.LastName  <- Order by is not important for me 

Persons - Table 
P_Id (PK, int, not null) 
LastName(nvarchar(50), null) 
FirstName(nvarchar(50), null) 
Address(nvarchar(50), null) 
City(nvarchar(50), null) 

Orders - Table 
O_Id(PK, int, not null) 
P_Id(FK, int, not null) 
OrderNo(nvarchar(50), not null) 

回答

16

您只能在indexed view上创建全文索引,这就是为什么你会收到错误。要在表或视图上创建全文搜索,它必须具有唯一的单列非空值索引。

换句话说,你应该创建您的看法是这样的:

CREATE VIEW ViewSearch WITH SCHEMABINDING AS 
SELECT Persons.P_Id AS ID, Persons.LastName, Persons.FirstName, Orders.OrderNo 
    FROM Persons 
    INNER JOIN Orders ON Persons.P_Id=Orders.P_Id 
GO 
CREATE UNIQUE CLUSTERED INDEX IX_ViewSearch ON ViewSearch (ID) 

SQL全文搜索通过一个称为人口工艺,填补文字和位置索引建立全文索引其中它们出现在你的表格和行中。这就是为什么你需要一个能够唯一标识你每行的字段,这就是为什么你需要将视图编入索引的原因。

更多信息herehere

+0

但是有可能在我的例子上创建?不知道该从哪里去,从你的答案。 – gulbaek

+1

@gulbaek - 我已经添加了一个示例,但我强烈建议您阅读链接中的文章。第一个链接描述了全文搜索是如何工作的,第二个链接是关于如何针对多个表创建一个fts的指南。 – TheBoyan

+0

@gulbaek - 你还可以在这里找到有关如何创建全文索引的有用信息:http://msdn.microsoft.com/en-us/library/ms187317.aspx – TheBoyan

相关问题