2014-10-20 121 views
2

我有我的数据库在SQL Server 2012上运行。我的表中的一列包含RTF文本。列的数据类型是nvarchar(MAX)。RTF上的SQL Server 2012全文搜索

我想为此栏设置一个全文搜索,分析rtf并仅在实际文本中搜索,以便我不会将rtf标记作为结果。

据我所知,解析rtf应该已经是SQL Server的一部分。但我不明白它的工作:-(

我以下:

  • 创建全文目录
  • 选择列包含RTF并添加full_text指数

但我仍然得到错误的结果

SELECT * FROM myTable WHERE 
CONTAINS(myRtfColumn,'rtf') 

- >仍然获得所有列,因为'rtf'是关键字

任何想法我做错了什么?我必须激活rtf搜索我的SQL Server或类似的东西吗?

回答

0

全文搜索仅适用于文本列。你在你的数据库中插入二进制文件 - > rtf。当你选择了nvarchar时,你告诉了你想要存储文本的sql server,但是你正在存储二进制文件。对于二进制的东西使用varbinary(max)来代替。

问题仍然存在,因为索引例程不知道如何解释richtext - 什么是控件字符什么是内容。

让我们谈谈解释器/过滤器

文件说: https://technet.microsoft.com/en-us/en-en/library/ms142531(v=SQL.105).aspx

VARBINARY(最大值)或varbinary数据 单一的varbinary(最大)或varbinary列可以存储多种类型的文件。 SQL Server 2008支持在操作系统中安装过滤器并可用的任何文档类型。每个文档的文档类型由文档的文件扩展名标识。例如,对于.doc文件扩展名,全文搜索使用支持Microsoft Word文档的过滤器。有关可用文档类型的列表,请查询sys.fulltext_document_types目录视图。

请注意,全文引擎可以利用操作系统中安装的现有过滤器。在可以使用操作系统过滤器,断字符和词干,你必须加载它们的服务器实例,如下所示:

最后TODO:

检查“的.rtf”是可用的过滤器。

EXEC sp_help_fulltext_system_components 'filter'; 

然后计算的列添加到您表“典型”,它总是返回

alter table yourname add [Typ] AS (CONVERT([nvarchar](8),'.rtf',0)); 

这现在可以用于索引类型规范“的.rtf”。