无法在表或索引视图上使用CONTAINS或FREETEXT谓词,因为它不是全文索引的

Dot*_*row 77 sql t-sql sql-server full-text-search sql-server-2008

我在SQL Server 2008 R2数据库中收到以下错误:

不能在表或索引视图'tblArmy'上使用CONTAINSFREETEXT谓词,因为它不是全文索引的.

Ale*_*Aza 104

  1. 确保已安装全文搜索功能.

    全文搜索设置

  2. 创建全文搜索目录.

     use AdventureWorks
     create fulltext catalog FullTextCatalog as default
    
     select *
     from sys.fulltext_catalogs
    
    Run Code Online (Sandbox Code Playgroud)
  3. 创建全文搜索索引.

     create fulltext index on Production.ProductDescription(Description)
     key index PK_ProductDescription_ProductDescriptionID
    
    Run Code Online (Sandbox Code Playgroud)

    在创建索引之前,请确保:
    - 您还没有表上的全文搜索索引,因为表上只允许一个全文搜索索引
    - 表上存在唯一索引.索引必须基于单键列,不允许NULL.
    - 存在全文目录.如果没有默认的全文目录,则必须显式指定全文目录名称.

您可以在SQL Sever Management Studio中执行步骤2和3.在对象资源管理器中,右键单击表,选择Full-Text index菜单项,然后选择Define Full-Text Index...子菜单项.全文索引向导将指导您完成整个过程.如果您还没有,它还会为您创建一个全文搜索目录.

在此输入图像描述

您可以在MSDN上找到更多信息


Moh*_*and 64

解决方法CONTAINS:如果您不想在列上创建全文索引,并且性能不是您的优先级之一,则可以使用LIKE不需要任何先前配置的语句:

示例:查找包含字母Q的所有产品:

SELECT ID, ProductName
FROM [ProductsDB].[dbo].[Products]
WHERE [ProductsDB].[dbo].[Products].ProductName LIKE '%Q%'
Run Code Online (Sandbox Code Playgroud)

  • 啊,太好了……这是一种简单、迂回的方式,不需要您挖掘安装程序并搞乱环境设置。做得好! (3认同)
  • [链接](http://msdn.microsoft.com/en-us/library/ms142571.aspx)。LIKE Transact-SQL 谓词仅适用于字符模式。此外,您不能使用 LIKE 谓词查询格式化的二进制数据。此外,针对大量非结构化文本数据的 LIKE 查询比针对相同数据的等效全文查询慢得多。 (2认同)

Ash*_*ada 19

您必须Full-Text-Index在数据库中的所有表上定义您需要使用的查询,CONTAINS这将需要一段时间.

而只需使用LIKE它将为您提供即时结果,而无需调整表的任何设置.

例:

SELECT * FROM ChartOfAccounts WHERE AccountName LIKE '%Tax%'
Run Code Online (Sandbox Code Playgroud)

用得到相同的结果CONTAINS可以与获得LIKE.

看到结果: 在此输入图像描述

  • 这是一个很好的技巧,但是此答案的措词方式是错误的。不要“只是使用”它。这样做会严重影响性能,将其放入生产系统的任何人都应该仔细考虑在非索引列上进行全表扫描。 (4认同)