不能在表或索引视图上使用 CONTAINS 或 FREETEXT 谓词,因为它不是全文索引
Posted
技术标签:
【中文标题】不能在表或索引视图上使用 CONTAINS 或 FREETEXT 谓词,因为它不是全文索引【英文标题】:Cannot use a CONTAINS or FREETEXT predicate on table or indexed view because it is not full-text indexed 【发布时间】:2011-08-25 14:02:12 【问题描述】:我的 SQL Server 2008 R2 数据库出现以下错误:
不能在表或索引视图“tblArmy”上使用
CONTAINS
或FREETEXT
谓词,因为它不是全文索引。
【问题讨论】:
你真的创建了全文目录吗? 【参考方案1】:-
确保您已安装全文搜索功能。
创建全文搜索目录(如果需要)
首先检查是否有任何目录已经存在
select *
from sys.fulltext_catalogs
如果没有找到目录,则创建一个
use [DatabaseName]
create fulltext catalog FullTextCatalog as default
您可以验证目录是否以与上述相同的方式创建
创建全文搜索索引。
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找到更多信息
执行完这些步骤后,您需要几分钟的时间,以便创建全文搜索索引(这取决于表和列数据的大小)
【讨论】:
好信息亚历克斯!注意:对于那些使用 Azure SQL 的用户,它目前不支持包含表。见这里:msdn.microsoft.com/library/azure/ee336253.aspx 另外,如果使用 SQL Express 高级服务,请参阅此处以创建全文索引:***.com/questions/10407337/…【参考方案2】:CONTAINS
的解决方法:如果您不想在列上创建全文索引,并且性能不是您的优先事项之一,您可以使用不需要任何事先配置的 LIKE
语句:
示例:查找所有包含字母 Q 的产品:
SELECT ID, ProductName
FROM [ProductsDB].[dbo].[Products]
WHERE [ProductsDB].[dbo].[Products].ProductName LIKE '%Q%'
【讨论】:
link。 LIKE Transact-SQL 谓词仅适用于字符模式。此外,您不能使用 LIKE 谓词来查询格式化的二进制数据。此外,针对大量非结构化文本数据的 LIKE 查询比针对相同数据的等效全文查询要慢得多。 啊,太好了……这种简单、迂回的方式不需要您挖掘安装程序并搞乱您的环境设置。干得好!【参考方案3】:您必须在数据库中所有需要使用CONTAINS
查询的表上定义Full-Text-Index
,这需要一些时间。
相反,您可以使用LIKE
,它会给您即时结果,而无需调整表格的任何设置。
例子:
SELECT * FROM ChartOfAccounts WHERE AccountName LIKE '%Tax%'
CONTAINS
得到的结果与LIKE
相同。
查看结果:
【讨论】:
真聪明 这是一个不错的技巧,但是这个答案的措辞是错误的。不要“只使用”它。这样做有一些严重的性能影响,任何将其放入生产系统的人都应该非常仔细地考虑在非索引列上进行这样的全表扫描。【参考方案4】:您可能需要enable the table for full-text indexing。
【讨论】:
启用/禁用全文搜索在上下文菜单中显示为灰色。我想我需要安装全文搜索。如何安装全文搜索? 运行 SQL Server 的安装,应该有一个用于更改已安装组件的选项(或类似的东西)。单击该按钮,然后在适当的时候选中全文复选框,您应该会很好。抱歉,我手头没有,否则我会给出更具体的说明。 @Hi Tom:我在运行 SQL Server 2008 R2 安装程序时没有看到添加功能的选项。【参考方案5】:您必须在要搜索的特定字段上添加全文索引。
ALTER TABLE news ADD FULLTEXT(headline, story);
“新闻”是您的表格和“标题、故事”字段,您不会启用全文搜索
【讨论】:
【参考方案6】:还有另一种解决方案可以将列全文设置为 true。
例如,这些解决方案对我不起作用
ALTER TABLE news ADD FULLTEXT(headline, story);
我的解决方案。
-
右键单击表格
设计
右键单击要编辑的列
全文索引
添加
关闭
刷新
下一步
-
右键单击表格
设计
单击要编辑的列
在 mssql 的底部,您将看到“列属性”选项卡
全文规范 ->(全文索引)设置为 true。
刷新
mssql 2014 版本
【讨论】:
【参考方案7】:Select * from table
where CONTAINS([Column], '"A00*"')
将与 % 相同
where [Column] Like 'A00%'
【讨论】:
以上是关于不能在表或索引视图上使用 CONTAINS 或 FREETEXT 谓词,因为它不是全文索引的主要内容,如果未能解决你的问题,请参考以下文章