Sql server 基于RTF的SQL Server 2012全文搜索
我的数据库运行在SQL Server 2012上。我的表的一列包含RTF文本。列的数据类型为nvarchar(MAX) 我想为这个专栏设置一个全文搜索,它分析rtf并只搜索真实文本,这样我就不会得到rtf标签 据我所知,解析rtf应该已经是SQL Server的一部分。但我无法让它工作:-( 我做了以下工作:Sql server 基于RTF的SQL Server 2012全文搜索,sql-server,full-text-search,rtf,Sql Server,Full Text Search,Rtf,我的数据库运行在SQL Server 2012上。我的表的一列包含RTF文本。列的数据类型为nvarchar(MAX) 我想为这个专栏设置一个全文搜索,它分析rtf并只搜索真实文本,这样我就不会得到rtf标签 据我所知,解析rtf应该已经是SQL Server的一部分。但我无法让它工作:-( 我做了以下工作: 创建全文目录 选择包含rtf的列并添加全文索引 但我还是得到了错误的结果 SELECT * FROM myTable WHERE CONTAINS(myRtfColumn,'rtf')
- 创建全文目录
- 选择包含rtf的列并添加全文索引
SELECT * FROM myTable WHERE
CONTAINS(myRtfColumn,'rtf')
-->仍然获取所有列,因为“rtf”是一个关键字
你知道我做错了什么吗?我必须为我的SQL Server或类似的东西激活rtf搜索吗?全文搜索只对文本列有效。你正在向数据库中插入二进制内容->rtf。当你选择nvarchar时,你告诉SQL Server你要存储文本,但你正在存储二进制内容。对于二进制内容,请使用改为varbinary(max) 问题仍然存在,因为索引例程不知道如何解释richtext——什么是控制字符什么是内容 让我们谈谈解释器/过滤器 文件说: varbinary(max)或varbinary数据 单个varbinary(最大值)或varbinary列可以存储多种类型的文档。SQL Server 2008支持任何已安装筛选器且在操作系统中可用的文档类型。每个文档的文档类型由文档的文件扩展名标识。例如,对于.doc文件扩展名,全文搜索使用支持Micr的筛选器osoft Word文档。有关可用文档类型的列表,请查询sys.fulltext\u document\u types目录视图 请注意,全文引擎可以利用操作系统中安装的现有筛选器。在使用操作系统筛选器、分词器和词干分析器之前,必须在服务器实例中加载它们,如下所示: 最后要做的事情: 检查“.rtf”是否作为可用的过滤器
EXEC sp_help_fulltext_system_components 'filter';
然后向表“typ”中添加一个计算列,该表始终返回“.rtf”
这现在可以用于索引作为类型规范。您或其他人可以详细说明如何使用此方法解析rtf标记吗?我不太明白。在我的场景中,我只需要从具有nvarchar(max)的表中进行选择字段中有一些文本,周围有rtf标记。在这种情况下如何使用筛选器?解析是在windows中构建的。这一切都基于ifilter界面。因此,如果需要全文pdf,请转到adobe并下载/安装ifilter for pdf。全文引擎需要知道存储的内容。这是计算列的原因。您可以在全文索引中,使用它告诉引擎应该为您使用哪个ifilter列。除非我遗漏了什么,否则这一切似乎都可以帮助我搜索文本,这意味着编写一个查询,只对文本进行过滤,而忽略rtf标记。我不感兴趣根据列中的内容过滤掉某些行umn,我想简单地
从表中选择*
,使其中包含rtf标记的列不会在查询结果中显示rtf标记。或者,如果可能,在结果集中显示原始rtf标记列和与原始列相同但已删除rtf标记的其他列。如果我有错误,请抱歉在最初的帖子发布5年后,我一直在向你抱怨这个问题。只是这个问题已经让我发疯了好几个星期了,用户仍然希望看到报告中没有rtf标签的专栏(我给她提供了报告中包含rtf标签的专栏,她说太乱了,看不懂)。问题是关于rtf内的搜索。我想您有一个不同的问题。我建议创建一个新问题“如何返回使用sql将rtf存储为纯文本的blob列。”。我认为这不是现成的解决方案。我会尝试使用c#编写自己的函数来调用rtf ifilter以获取纯文本,就像搜索引擎那样。
alter table yourname add [Typ] AS (CONVERT([nvarchar](8),'.rtf',0));