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

7
我在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。按照此博客文章的说明,我执行了以下命令:
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' 

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

文档类型:.pdf
路径:C:\Program Files\Adobe\PDF IFilter 6.0\PDFFILT.dll

然后我重新创建了MediaFile表的索引,选择FileContent作为要索引的列,FileExtension作为其类型。向导创建索引并成功完成。为了测试,我执行了以下搜索:
SELECT MediaFileId, FileExtension FROM MediaFile WHERE CONTAINS(*, '"house"');

这会返回包含该词的DOC文件,但不包括任何PDF文件,尽管我知道表格中肯定有包含“house”一词的PDF文件。
顺便说一下,我曾经让上面的搜索正确返回了PDF文件,但后来又停止工作了,原因不明。
有什么想法可以阻止SQL Server 2005索引PDF文件,即使已安装Adobe iFilter并且似乎已加载?
2个回答

7
感谢Ivan。最终我通过从头开始操作成功了。似乎操作顺序很重要,链接博客中提到的在加载iFilter后关闭'load_os_resources'设置可能不是最佳选择,因为这会导致SQL Server重新启动时iFilter无法加载。
如果我没记错,最终对我起作用的步骤顺序如下:
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. 进行完整重新索引
虽然这样做奏效了,但我相当确定在最终成功之前进行了几次这些步骤。

如何操作:1.) 如何通过编程验证PDF iFilter是否已安装?2.) 如何通过编程创建全文索引?3.) 如何通过编程进行完整重新索引? - Kiquenet

0

我刚刚花了一个小时努力解决它,但最终让它工作了。我做了你所做的一切,所以尝试简化查询(我用字段名替换了*并删除了术语中的双引号):

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接