Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 基于RTF的SQL Server 2012全文搜索_Sql Server_Full Text Search_Rtf - Fatal编程技术网

Sql server 基于RTF的SQL Server 2012全文搜索

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')

我的数据库运行在SQL Server 2012上。我的表的一列包含RTF文本。列的数据类型为nvarchar(MAX)

我想为这个专栏设置一个全文搜索,它分析rtf并只搜索真实文本,这样我就不会得到rtf标签

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

我做了以下工作:

  • 创建全文目录
  • 选择包含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));