У меня странная проблема с индексированием файлов PDF в SQL Server 2005, и я надеюсь, что кто-то может помочь. В моей базе данных есть таблица с именем MediaFile со следующими полями - MediaFileId int identity pk, FileContent image и FileExtension varchar (5). У меня есть веб-приложение, которое без проблем хранит содержимое файла в этой таблице, и я могу без проблем использовать полнотекстовый поиск в документах, 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 и убедился, что iFilter для расширений PDF установлен правильно, выполнив следующую команду:
select document_type, path from sys.fulltext_document_types where document_type = '.pdf'
Это возвращает следующую информацию, которая выглядит правильной:
document_type: .pdf
path: C:\Program Files\Adobe\PDF IFilter 6.0\PDFFILT.dll
Затем я (повторно) создал индекс в таблице MediaFile, выбрав FileContent в качестве столбца для индексации и FileExtension в качестве его типа. Мастер создает индекс и успешно завершает свою работу. Для проверки я выполняю такой поиск:
SELECT MediaFileId, FileExtension FROM MediaFile WHERE CONTAINS(*, '"house"');
Это возвращает файлы DOC, которые содержат этот термин, но не файлы PDF, хотя я знаю, что в таблице определенно есть файлы PDF, которые содержат слово дом.
Между прочим, у меня это сработало один раз на несколько минут, когда приведенный выше поиск вернул правильные файлы PDF, но затем он снова просто перестал работать без видимой причины.
Есть ли идеи относительно того, что может помешать SQL Server 2005 индексировать PDF-файлы, даже если Adobe iFilter установлен и, похоже, загружен?





Я просто боролся с этим в течение часа, но, наконец, он заработал. Я сделал все, что вы сделали, поэтому просто попытайтесь упростить запрос (я заменил * именем поля и удалил двойные кавычки в термине):
SELECT MediaFileId, FileExtension FROM MediaFile WHERE CONTAINS(FileContent, 'house')
Также при создании полнотекстового индекса убедитесь, что вы указали язык. И последнее: возможно, вы можете попробовать изменить тип поля с Image на varbinary(MAX).
Спасибо, Иван. В конце концов удалось заставить это работать, начав все с нуля. Похоже, что порядок, в котором выполняются действия, имеет большое значение, и рекомендации, приведенные в связанном блоге, чтобы отключить параметр load_os_resources после загрузки iFilter, вероятно, не лучший вариант, так как это приведет к тому, что iFilter не загружаться при перезапуске SQL Server.
Если я правильно помню, последовательность шагов, которая в конечном итоге сработала для меня, была следующей:
Хотя это помогло, я уверен, что выполнил эти шаги несколько раз, прежде чем он в конечном итоге начал работать правильно.
programatically? 2.) создать полнотекстовый указательprogramatically? 3.) сделать полный переиндексprogramatically?