我正在运行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)
您只能在索引视图上创建全文本索引,这就是您收到错误的原因。要在表或视图上创建全文搜索,它必须具有唯一的单列且不可为空的索引。
换句话说,您应该创建如下视图:
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全文搜索通过称为“填充”的过程来构建全文索引,该过程将单词和单词在表格和行中的位置填充到索引中。这就是为什么您需要一个将唯一标识您每一行的字段的原因,这就是为什么您需要使视图建立索引。
更多信息在这里。