Использование полнотекстового поиска в файлах PDF в SQL Server 2005

У меня странная проблема с индексированием файлов 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 установлен и, похоже, загружен?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
7
0
11 870
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

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

Ответ принят как подходящий

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

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

КАК: 1.) Проверить, что PDF iFilter установлен programatically? 2.) создать полнотекстовый указательprogramatically? 3.) сделать полный переиндексprogramatically?
Kiquenet 13.06.2016 09:45

Другие вопросы по теме