Использование полнотекстового поиска с файлами PDF в SQL Server 2005 - PullRequest
7 голосов
/ 07 ноября 2008

У меня странная проблема с индексацией PDF-файлов в SQL Server 2005, и я надеюсь, что кто-то может помочь. В моей базе данных есть таблица MediaFile со следующими полями - MediaFileId int identity pk, FileContent image и FileExtension varchar (5). У меня есть веб-приложение, хранящее содержимое файла в этой таблице без проблем, и я могу без проблем использовать полнотекстовый поиск по документам, документам и т. Д. - единственное расширение файла, которое не работает, - это 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
путь: C: \ Program Files \ Adobe \ PDF IFilter 6.0 \ PDFFILT.dll

Затем я (заново) создал индекс для таблицы MediaFile, выбрав FileContent в качестве столбца для индекса и FileExtension в качестве его типа. Мастер создает индекс и успешно завершает работу. Чтобы проверить, я выполняю такой поиск:

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

Возвращает файлы DOC, содержащие этот термин, но не PDF-файлы, хотя я знаю, что в таблице определенно есть PDF-файлы, содержащие слово house .

Между прочим, я работал один раз в течение нескольких минут, когда поиск, приведенный выше, возвращал правильные файлы PDF, но затем он просто перестал работать без видимой причины.

Есть идеи, что может помешать SQL Server 2005 индексировать PDF-файлы, даже если Adobe iFilter установлен и загружен?

Ответы [ 2 ]

7 голосов
/ 13 ноября 2008

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

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

0 голосов
/ 12 ноября 2008

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

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

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

...