在具有内部联接的视图上启用全文搜索

时间:2011-12-13 09:13:37

标签: sql sql-server-2008 full-text-search full-text-indexing

我正在运行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)

1 个答案:

答案 0 :(得分:18)

您只能在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全文搜索通过名为population的进程构建全文索引,该进程使用单词及其在表和行中出现的位置填充索引。这就是为什么您需要一个唯一标识每一行的字段,这就是您需要将视图编入索引的原因。

更多信息herehere