sql - 使用内部联接在 View 上启用全文搜索

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

我正在运行 Sql Server 2008 R2,我需要在具有内部联接的 View 上启用全文搜索。我的问题是我不知道如何创建全文索引。

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

A unique column must be defined on this table/view.



为了让大家更好的理解我的问题,请看下面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)

最佳答案

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

换句话说,你应该像这样创建你的 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 全文搜索通过称为填充的过程构建全文索引,该过程使用单词及其在表和行中出现的位置填充索引。这就是为什么您需要一个字段来唯一标识您的每一行,这就是为什么您需要对 View 进行索引的原因。

更多信息 here .

关于sql - 使用内部联接在 View 上启用全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8486703/

相关文章:

sql - 更新每组单行

sql - 在动态 SQL 中使用 USE DATABASE_NAME 时不会更改数据库

elasticsearch - ElasticSearch:计算一组文档中一组单词的出现频率

mysql - 使用 innoDb 实现搜索功能的最佳方式

mysql - 将 WHERE 子句中的 SUBQUERY 更改为 NORMAL JOIN

mysql - SQL 检查记录之一是否不存在并加入其他表

java - 如何将 JSP 标签转换为 SQL

mysql - 向查询添加 +1 以解决 "division by zero"错误

SQL 服务器 : join tables result doesn't contain null values (I want it to)

postgresql - 如何在 PostgreSQL 中设置全文搜索查询