【问题标题】:Enable Full-Text Search on View with Inner Join使用内连接在视图上启用全文搜索
【发布时间】:2012-01-19 04:16:33
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    您只能在 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 全文搜索通过称为填充的过程构建全文索引,该过程用单词以及它们在表和行中出现的位置填充索引。这就是为什么您需要一个字段来唯一标识您的每一行,这就是为什么您需要为视图编制索引。

    更多信息here

    【讨论】:

    • 但是可以在我的示例中创建吗?从您的回答中不知道该去哪里。
    • @gulbaek - 我添加了一个示例,但我强烈建议您阅读链接中的文章。第一个链接描述了全文搜索的工作原理,第二个链接是关于如何针对多个表创建 fts 的指南。
    • @gulbaek - 您还可以在此处找到有关如何创建全文索引的有用信息:msdn.microsoft.com/en-us/library/ms187317.aspx
    • 如果这个人有多个订单,这个人的ID会不会多次出现在视图中,因此不再是唯一的?还是您的意思是它必须在它来自的表中是唯一的?
    • 现在有两个链接坏了,所以答案现在更没用了。
    猜你喜欢
    • 2018-05-02
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多