Указатель Lucene 4.2.0 в формате pdf

Я использую пример исходного кода из демонстрационного API Lucene 4.2.0: http://lucene.apache.org/core/4_2_0/demo/overview-summary.html

Я запускаю IndexFiles.java для создания индекса из каталога файлов rtf, pdf, doc и docx. Затем я запускаю SearcFiles.java и замечаю, что сталкиваюсь с несколькими случаями, когда мои поиски терпят неудачу, т. е. он не возвращает документ, содержащий искомое слово.

Я подозреваю, что это связано с тем, что Lucene 4.2.0 не может правильно индексировать файлы, отличные от .txt, без дополнительной настройки.

Вопрос: Может ли исходный код IndexFiles.java (Lucene 4.2.0) правильно индексировать файлы pdf, doc, docx, как написано в предоставленной ссылке? Есть ли у кого-нибудь примеры или ссылки на то, как кодировать эту функциональность?

Спасибо


person Brian    schedule 19.05.2013    source источник


Ответы (1)


Нет, не может. IndexFiles — это демонстрация, пример для обучения, но он не предназначен для использования в производственной среде. Если вы посмотрите на код, вы увидите, что он просто использует FileInputStream (обернутый InputStreamReader, обернутый BufferedReader). Как правило, Lucene не справляется с анализом различных форматов файлов (конечно, за исключением собственных индексных файлов). Как анализировать файл, чтобы предоставить Lucene значимое содержимое, зависит от вас.

Apache Tika может быть хорошим местом для поиска этой функции. Вот простой пример использования Тика с Lucene.

Вы также можете рассмотреть возможность использования Solr.

person femtoRgon    schedule 20.05.2013
comment
Спасибо за Ваш ответ. Не могли бы вы уточнить, на какие проблемы с использованием процесса FileInputStream вы обратили внимание? Мне просто нужен Lucene для настольного приложения, где я могу создать доступный для поиска индекс, указав его на каталог на рабочем столе пользователя. Кроме того, я был немного сбит с толку, когда вы сказали, кроме собственных индексных файлов. Разве синтаксический анализ не происходит до индексации файлов? Кажется, Lucene обрабатывает только файлы .txt. Все остальные форматы должны сначала иметь текст, извлеченный с помощью чего-то вроде Tika. Я думаю о синтаксическом анализе как о токенизации слов в документе. Анализируется ли извлечение текста? - person Brian; 20.05.2013
comment
Lucene вообще не обрабатывает файлы. Эта демонстрация работает с обычными текстовыми файлами, а ядро ​​Lucene — нет. FileStreamReader — это стандартный потоковый ридер Java, и для ваших целей он будет обрабатывать только обычный текст. Это работает на философии Unix. Lucene индексирует содержимое. Tika извлекает содержимое из богатых документов. Я добавил ссылки на пару примеров с использованием Tika, один с Lucene напрямую, другой с Solr (который вы также можете рассмотреть). - person femtoRgon; 20.05.2013
comment
Спасибо! Эти ссылки полезны. Я начну исследовать Тику. Как я могу заменить код на потоковый ридер? Я представляю передачу некоторой структуры проанализированного контента с помощью Tika...? - person Brian; 20.05.2013