一尘不染

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

sql

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

阅读 154

收藏
2021-03-10

共1个答案

一尘不染

您只能在索引视图上创建全文本索引,这就是您收到错误的原因。要在表或视图上创建全文搜索,它必须具有唯一的单列且不可为空的索引。

换句话说,您应该创建如下视图:

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全文搜索通过称为“填充”的过程来构建全文索引,该过程将单词和单词在表格和行中的位置填充到索引中。这就是为什么您需要一个将唯一标识您每一行的字段的原因,这就是为什么您需要使视图建立索引。

更多信息在这里

2021-03-10