在SQL Server 2005中使用PDF文件进行全文搜索

时间:2008-11-07 16:51:41

标签: sql-server-2005 search pdf indexing full-text-search

我在SQL Server 2005中索引PDF文件时遇到了一个奇怪的问题,希望有人可以提供帮助。我的数据库有一个名为MediaFile的表,其中包含以下字段:MediaFileId int identity pk,FileContent image和FileExtension varchar(5)。我的Web应用程序在此表中存储文件内容没有任何问题,并且能够在doc,xls等上使用全文搜索而没有任何问题 - 唯一无法正常工作的文件扩展名是PDF。在此表上执行全文搜索时,我知道存在于表格中的PDF文件中存在的单词,搜索结果中不会返回这些文件。

操作系统是Windows Server 2003 SP2,我安装了Adobe iFilter 6.0。按照this blog entry上的说明,我执行了以下命令:

exec sp_fulltext_service 'load_os_resources', 1;
exec sp_fulltext_service 'verify_signature', 0;

在此之后,我重新启动了SQL Server,并通过执行以下命令验证是否正确安装了PDF扩展的iFilter:

select document_type, path from sys.fulltext_document_types where document_type = '.pdf' 

这将返回以下信息,看起来是正确的:

  

document_type:.pdf
  路径:C:\ Program Files \ Adob​​e \ PDF IFilter 6.0 \ PDFFILT.dll

然后我(重新)在MediaFile表上创建索引,选择FileContent作为索引列,将FileExtension作为其类型。该向导将创建索引并成功完成。为了测试,我正在执行这样的搜索:

SELECT MediaFileId, FileExtension FROM MediaFile WHERE CONTAINS(*, '"house"');

这会返回包含此术语但不包含任何PDF文件的DOC文件,但我知道表格中肯定有PDF文件包含 house 这个词。

顺便说一句,我让这个工作了几分钟,上面的搜索返回了正确的PDF文件,但之后它就没有明显的原因再次停止工作。

关于什么可以阻止SQL Server 2005索引PDF的任何想法,即使安装了Adobe iFilter并且似乎已加载?

2 个答案:

答案 0 :(得分:7)

谢谢伊万。管理最终通过从头开始一切来实现这一点。似乎完成任务的顺序会产生很大的不同,并且在加载iFilter后关联博客上关闭'load_os_resources'设置的建议可能不是最好的选择,因为这会导致iFilter重新启动SQL Server时不加载。

如果我没记错的话,最终对我有用的步骤顺序如下:

  1. 确保表中没有索引(如果是,请将其删除)
  2. 安装Adobe iFilter
  3. 执行命令exec sp_fulltext_service'load_os_resources',1;
  4. 执行命令exec sp_fulltext_service'verify_signature',0;
  5. 重新启动SQL Server
  6. 验证PDF iFilter已安装
  7. 在表格上创建全文索引
  8. 完全重新索引
  9. 尽管这样做了,但我确信在最终开始正常工作之前,我已经执行了几次这些步骤。

答案 1 :(得分:0)

我刚刚与它斗争了一个小时,但终于让它运转了。我做了你所做的一切,所以只是尝试简化查询(我用字段名替换*并删除术语上的双引号):

SELECT MediaFileId, FileExtension FROM MediaFile WHERE CONTAINS(FileContent, 'house')

另外,当您创建全文索引时,请确保指定语言。最后一件事是,您可以尝试将字段类型从Image更改为varbinary(MAX)