【问题标题】:SQL Server 2012 Full Text Search on RTFSQL Server 2012 RTF 上的全文搜索
【发布时间】:2014-12-15 11:35:44
【问题描述】:

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

我想为此列设置一个全文搜索,它分析 rtf 并仅在真实文本中搜索,这样我就不会得到 rtf 标签作为结果。

据我了解,解析 rtf 应该已经是 SQL Server 的一部分。但我没有得到它的工作:-(

我做了以下:

  • 创建全文目录
  • 选择包含rtf的列并添加全文索引

但我仍然得到错误的结果

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

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

任何想法我做错了什么?我是否必须为我的 SQL Server 或类似的东西激活 rtf-Search?

【问题讨论】:

    标签: sql-server full-text-search rtf


    【解决方案1】:

    全文搜索仅适用于文本列。您正在将二进制文件插入到数据库中-> rtf。当您选择 nvarchar 时,您告诉 sql 服务器您要存储文本,但您正在存储二进制内容。对于二进制文件,请改用 varbinary(max)。

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

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

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

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

    请注意,全文引擎可以利用操作系统中安装的现有过滤器。在您可以使用操作系统过滤器、分词器和词干分析器之前,您必须将它们加载到服务器实例中,如下所示:

    最后要做的事情:

    检查“.rtf”是否作为过滤器可用。

    EXEC sp_help_fulltext_system_components 'filter'; 
    

    然后向您的表“typ”添加一个计算列,该列始终返回“.rtf”

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

    现在可以将索引用作类型规范。

    【讨论】:

    • 您或其他人能否详细说明如何使用此方法解析出 rtf 标签?我不太明白。在我的场景中,我只需要从一个表中进行 SELECT,该表有一个 nvarchar(max) 字段,其中一些文本被 rtf 标签包围。在这种情况下如何使用过滤器?
    • 解析是内置在 windows 中的。这一切都基于 ifilter 接口。因此,如果您需要全文 pdf,请转到 adobe 并下载/安装 ifilter for pdf。全文引擎需要知道存储了什么。这就是计算列的原因。您在全文索引中使用它来告诉引擎应该为您的列使用哪个 ifilter。
    • 除非我遗漏了什么,似乎这一切都会帮助我搜索文本,这意味着编写一个仅过滤文本并忽略 rtf 标签的查询。我对根据列中的内容过滤掉某些行不感兴趣,我只想SELECT * FROM Table 并使其包含 rtf 标签的列根本不会在查询结果中显示 rtf 标签.或者,如果可能,在结果集中显示原始 rtf-laden 列与原始列相同但删除了 rtf 标签的不同列。
    • 很抱歉,如果我在原帖发布 5 年后还在打扰您。只是这个问题已经让我发疯了几个星期,用户仍然希望看到报告上的列没有 rtf标签(我向她提供了带有rtf的报告列包括标签,她说它太乱了,无法阅读)。
    • 问题是关于 rtf 中的搜索。我想你有一个不同的问题。我建议创建一个新问题“如何使用 sql 返回将 rtf 存储为纯文本的 blob 列。”。我认为没有现成的解决方案。我会尝试使用 c# 编写一个自己的函数来调用 rtf ifilter 来获取纯文本,就像搜索引擎一样。
    猜你喜欢
    • 1970-01-01
    • 2012-09-13
    • 2013-06-27
    • 2010-09-06
    • 2011-09-21
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多