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


Answers:


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

    全文搜索设置

  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。
    -存在全文目录。如果没有默认的全文目录,则必须明确指定全文目录名称。

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

在此处输入图片说明

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


很好的信息,Alex!注意:对于使用Azure SQL的用户,它目前不支持“包含表”。请参阅此处:msdn.microsoft.com/library/azure/ee336253.aspx
Termato 2014年

此外,如果使用SQL Express高级服务,看到这里创建全文索引:stackoverflow.com/questions/10407337/...
Termato

69

解决方案CONTAINS:如果您不想在该列上创建全文本索引,而性能也不是您的优先事项之一,则可以使用LIKE不需要任何事先配置的语句:

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

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

1
链接。LIKE Transact-SQL谓词仅适用于字符模式。同样,您不能使用LIKE谓词来查询格式化的二进制数据。此外,针对大量非结构化文本数据的LIKE查询要比针对相同数据的等效全文查询慢得多。
马诺利斯

1
啊,太好了……这是一种简单,绕行的方式,不需要您挖掘安装程序并搞砸环境设置。做得好!
克里斯汀

21

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

相反,您可以使用,LIKE而无需调整表的任何设置即可获得即时结果。

例:

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

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

查看结果: 在此处输入图片说明


那真的很聪明
WonderWorker

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

3

您可能需要为表启用全文索引


启用/禁用上下文菜单中的全文搜索显示为灰色。我想我需要安装全文搜索。如何安装全文搜索?
DotnetSparrow

运行SQL Server的安装,应该有一个用于更改已安装组件(或类似组件)的选项。单击该按钮,然后在适当的时间选中“全文”复选框,您应该会很好。抱歉,我没有一个方便的人,或者我会提供更具体的说明。
汤姆H

@嗨,汤姆:运行SQL Server 2008 R2安装程序时,我没有看到添加功能的选项。
DotnetSparrow

1

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

ALTER TABLE news ADD FULLTEXT(headline, story);

其中“新闻”是您的表格,“标题,故事”字段是您不会启用全文搜索的字段


1

还有另一种解决方案将“全文”列设置为true。

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

ALTER TABLE news ADD FULLTEXT(headline, story);

我的解决方案。

  1. 右键点击表格
  2. 设计
  3. 右键单击要编辑的列
  4. 全文索引
  5. 刷新

下一步

  1. 右键点击表格
  2. 设计
  3. 单击要编辑的列
  4. 在mssql的底部,将出现“列属性”选项卡
  5. 全文规范->(已全文索引)设置为true。

刷新

mssql 2014的版本


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.