2008-11-07 2 views
7

У меня есть странная проблема с индексацией PDF-файлов в SQL Server 2005 и надеюсь, что кто-то может помочь. В моей базе данных есть таблица MediaFile со следующими полями: MediaFileId int identity pk, FileContent image и FileExtension varchar (5). У меня есть веб-приложение, в котором хранятся содержимое файла в этой таблице без проблем, и я могу без проблем использовать полнотекстовый поиск по doc, xls и т. Д. - единственное расширение файла, которое не работает, - это PDF. При выполнении полнотекстовых поисков в этой таблице для слов, которые, как я знаю, существуют внутри PDF-файлов, сохраненных в таблице, эти файлы не возвращаются в результатах поиска.Использование полнотекстового поиска с файлами PDF в SQL Server 2005

ОС - 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, и проверить, что Ifilter для расширения PDF установлен правильно, выполнив следующую команду:

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

Это возвращает следующую информацию, которая выглядит правильно:

document_type: .pdf
путь: 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 установлен и, кажется, загружен?

ответ

7

Спасибо Иван. В конечном итоге удалось добиться этой работы, начав все с нуля. Кажется, что порядок, в котором делаются дела, имеет большое значение, и рекомендации, приведенные в связанном блоге, отключить параметр load_os_resources после загрузки iFilter, вероятно, не самый лучший вариант, так как это приведет к тому, что 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. Restart SQL Server
  6. Проверьте PDF IFilter установлен
  7. Создание полнотекстового индекса на столе
  8. ли полное повторное индекс

Хотя это сделал трюк, я совершенно уверен, что я выполнил эти шаги несколько раз, прежде чем он в конечном итоге начал работать должным образом.

+0

*** КАК-В ***: 1.) проверить PDF iFilter установлен `программно`? 2.) créate ** full-text index ** `programatically`? 3.) сделать ** полный переиндекса ** `программно`? – Kiquenet 2016-06-13 06:45:06

0

Я только что боролся с ним в течение часа, но, наконец, получил его работу. Я сделал все, что вы сделали, так что просто попробуйте упростить запрос (я заменил * с именем поля и удалены двойными кавычками на сроке):

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

Кроме того, при создании полнотекстового индекса убедитесь, что вы указать язык. И последнее, может быть, вы можете попытаться изменить тип поля от Image до varbinary(MAX).

Смежные вопросы