在MS SQL中创建FREETEXTTABLE

时间:2015-10-05 10:37:20

标签: sql-server freetexttable

我正在尝试创建FREETEXTTABLE。 我收到以下错误。

消息7601,级别16,状态2,行1

无法在表格或索引视图上使用CONTAINS或FREETEXT谓词' Flags'因为它不是全文索引。

我的样本,

CREATE TABLE Flags (Country nvarchar(30) NOT NULL, FlagColors varchar(200));

CREATE UNIQUE CLUSTERED INDEX FlagKey ON Flags(Country);

INSERT Flags VALUES ('France', 'Blue and White and Red');
INSERT Flags VALUES ('Italy', 'Green and White and Red');
INSERT Flags VALUES ('Tanzania', 'Green and Yellow and Black and Yellow and Blue');

SELECT * FROM Flags;
GO

CREATE FULLTEXT CATALOG TestFTCat;
CREATE FULLTEXT INDEX ON Flags(FlagColors) KEY INDEX FlagKey ON TestFTCat;
GO 

SELECT * FROM FREETEXTTABLE (Flags, FlagColors, 'Blue');

2 个答案:

答案 0 :(得分:0)

以下代码部分以某种方式未在您的数据库上执行 请先执行以下命令,然后使用FreeTextTable

CREATE FULLTEXT CATALOG TestFTCat;
CREATE FULLTEXT INDEX ON Flags(FlagColors) KEY INDEX FlagKey ON TestFTCat;

答案 1 :(得分:0)

验证是否已安装MSSQL Server 2008的全文“组件”的简单方法是执行以下T-SQL

SELECT SERVERPROPERTY('IsFullTextInstalled')

如果返回值'1',则安装组件。

否则,您必须在现有SQL Server实例上安装SQL Server全文搜索

  1. 在服务器上下载“带有高级服务的SQL Server Express”的最新安装程序(例如,将其保存在“c:\ installers”中) MSSQL Server 2008 Express with Advanced Services.
  2. 浏览到保存位置并解压缩自解压EXE(右键单击并单击“提取”)。
  3. 双击设置安装。
  4. 选择“将现有实例升级到新版本或版本”并完成所有步骤。
  5. 我很确定我从未被问到我想要什么功能(即没有机会选择全文搜索)。再次运行安装程序时,也无法“向现有实例添加功能”,因此最终我发现需要执行以下额外步骤...
  6. 转到“控制面板”>添加或删除程序
  7. 找到SQL Server并打开它。 (它问我一个问题,“卸载这个,而其他人正在使用它会给他们带来一些痛苦” - 这有点可怕但是我说是的好然后它问了一个常见的问题:我想要卸载或者变化)
  8. 问题:卸载或更改(答案:更改)。
  9. 点击“添加功能”
  10. 浏览安装媒体。在这种情况下,我们可以找到我们解压缩“SQL Server Express with Advanced Services”安装程序的位置(注意它必须被提取或者不喜欢它)。
  11. 经历一堆步伐。然后,系统会询问您“安装新实例”或“向现有实例添加功能”(选择添加功能)。
  12. 在“功能”步骤中,您可以选中“全文搜索”框(hooray !!)
  13. 完成向导,现在一切正常,运行此sql进行确认:

    SELECT SERVERPROPERTY('IsFullTextInstalled')

  14. 现在您可以启用全文搜索使用T-SQL

    -- We'll use Northwind sample database to enable
    -- Full Text Search feature using T-SQL code only
    USE Northwind
    GO
    
    -- We need to enable full text search for Northwind database
    -- We will do that with sp_fulltext_database procedure
    EXEC sp_fulltext_database 'enable'
    -- Create catalog
    EXEC sp_fulltext_catalog 'NorthwindCatalog','create'
    -- Add some indexes to database
    EXEC sp_fulltext_table 'Customers', 'create', 'NorthwindCatalog', 'pk_customers'
    EXEC sp_fulltext_table 'Orders', 'create', 'NorthwindCatalog', 'pk_orders'
    -- add columns for searching to full text search index
    EXEC sp_fulltext_column 'Customers', 'CompanyName', 'add'
    EXEC sp_fulltext_column 'Customers', 'ContactName', 'add'
    EXEC sp_fulltext_column 'Customers', 'Address', 'add'
    EXEC sp_fulltext_column 'Customers', 'City', 'add'
    EXEC sp_fulltext_column 'Orders', 'ShipName', 'add'
    EXEC sp_fulltext_column 'Orders', 'ShipAddress', 'add'
    EXEC sp_fulltext_column 'Orders', 'ShipCity', 'add'
    -- Activate full text search indexes
    EXEC sp_fulltext_table 'Customers','activate'
    EXEC sp_fulltext_table 'Orders','activate'
    -- start full population of catalog
    EXEC sp_fulltext_catalog 'NorthwindCatalog', 'start_full'
    

    现在,您可以使用 CONTAINS FREETEXT CONTAINSTABLE FREETEXTTABLE 关键字对索引列执行搜索。例如,假设我要检查姓名为Maria或Ana的所有联系人:

    USE Northwind
    GO
    
    SELECT CustomerId, ContactName, CompanyName, Address, City
    FROM Customers c INNER JOIN
    CONTAINSTABLE(Customers, (ContactName), '"Maria" OR "Ana"') AS KEY_TBL
    ON c.CustomerId = KEY_TBL.[KEY]
    ORDER BY KEY_TBL.RANK DESC
    

    此SQL查询将返回结果,如下图所示: enter image description here