7

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

操作系统是 Windows Server 2003 SP2,我安装了Adob​​e 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 的任何想法,即使安装了 Adob​​e iFilter 并且似乎已加载?

4

2 回答 2

7

谢谢伊万。通过从头开始一切,最终成功地完成了这项工作。看起来事情完成的顺序有很大的不同,链接博客上给出的在加载 iFilter 后关闭“load_os_resources”设置的建议可能不是最好的选择,因为这会导致 iFilter SQL Server 重新启动时不会加载。

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

  1. 确保该表还没有索引(如果有,请将其删除)
  2. 安装 Adob​​e 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. 做完整的重新索引

虽然这起到了作用,但我很确定在它最终开始正常工作之前我执行了几次这些步骤。

于 2008-11-12T22:20:17.987 回答
0

我刚刚挣扎了一个小时,但终于让它工作了。我做了你所做的一切,所以试着简化查询(我*用字段名替换并删除了术语上的双引号):

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

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

于 2008-11-11T22:20:29.860 回答