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

时间:2011-05-14 16:39:17

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

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

  

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

7 个答案:

答案 0 :(得分:99)

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

    Full-Text Search setup

  2. 创建全文搜索目录。

     use AdventureWorks
     create fulltext catalog FullTextCatalog as default
    
     select *
     from sys.fulltext_catalogs
    
  3. 创建全文搜索索引。

     create fulltext index on Production.ProductDescription(Description)
     key index PK_ProductDescription_ProductDescriptionID
    

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

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

    enter image description here

    您可以在MSDN

    找到更多信息

答案 1 :(得分:56)

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

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

SELECT ID, ProductName
FROM [ProductsDB].[dbo].[Products]
WHERE [ProductsDB].[dbo].[Products].ProductName LIKE '%Q%'

答案 2 :(得分:16)

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

相反,您可以使用LIKE,它可以为您提供即时结果,而无需调整表格的任何设置。

示例:

SELECT * FROM ChartOfAccounts WHERE AccountName LIKE '%Tax%'

使用CONTAINS可以获得使用LIKE获得的相同结果。

看到结果: enter image description here

答案 3 :(得分:3)

答案 4 :(得分:1)

您必须在要搜索的特定字段上添加全文索引。

ALTER TABLE news ADD FULLTEXT(headline, story);

“新闻”是您的表格和“标题,故事”字段,您无法启用全文搜索

答案 5 :(得分:1)

还有一个解决方案可将列全文设置为true。

这些解决方案例如对我不起作用

ALTER TABLE news ADD FULLTEXT(headline, story);

我的解决方案。

  1. 右键单击表
  2. 设计
  3. 右键单击要编辑的列
  4. 全文索引
  5. 添加
  6. 关闭
  7. 刷新
  8. 下一步

    1. 右键单击表
    2. 设计
    3. 点击要修改的列
    4. 在mssql的底部,你会看到tab" Column properties"
    5. 全文规范 - > (全文索引)设置为true。
    6. 刷新

      mssql 2014版本

答案 6 :(得分:0)

Select * from table
where CONTAINS([Column], '"A00*"')  

将充当与%p相同的

where [Column] Like 'A00%'