Извлечение и индексирование содержимого с помощью Soir и Apache Tika

Для того чтобы извлечь содержимое из документа и проиндексировать его, необходимо воспользоваться некоторыми идеями, изложенными в этой главе и в главе 1. Самое главное - необходимо спроектировать схему Soir, так чтобы она отражала структуру информации, извлекаемой из содержимого, по которому вы собираетесь искать. Поскольку для извлечения содержимого мы будем использовать библиотеку Tika, то приложение должно установить соответствие между полями схемы и метаданными и содержимым, возвращаемым Tika.

Для просмотра полной схемы Soir откройте файл solr/conf/schema. xml в своем любимом редакторе. К сказанному выше о проектировании схемы можно лишь добавить, что мы старались правильно сопоставить типы Tika и типы полей Soir. Например, счетчик страниц - целое число, поэтому мы сделали его целым в схеме Soir. Для этого и других полей мы итеративно просматривали выборочное множество документов и извлекаемую из них информацию. Чтобы это сделать, мы воспользовались тем фактом, что интеграция Soir с Tika устроена так, что позволяет извлекать содержимое, не индексируя его. С помощью программы curl (имеется по умолчанию в большинстве систем на базе *NIX, а версию для Windows можно скачать со страницы http://curl.haxx.se/download.html) мы можем посылать Soir файлы и другие HTTP-запросы. Если вы еще не запустили сервер Soir, сделайте это, как описано в главе 1. После запуска Soir можно индексировать содержимое. В данном случае мы посылаем Soir команду с требованием извлечь содержимое тестового файла: curl "http://localhost:8983/solr/update/extract?&extractOnly=true" -F "myfile=@src/test/resources/sample-word. doc"

Параметром команды является тестовый документ Word, расположенный в каталоге src/test/resources в коде, прилагаемом к книге, но можно взять любой файл в формате Word или PDF. Чтобы команда curl нашла документ, ее нужно запускать, находясь в каталоге на верхнем уровне дерева распакованного кода. В ответ будет получено извлеченное из файла содержимое и метаданные. Выглядит это следующим образом (часть содержимого для краткости опущена):

  • 0
  • 8

<?xml version="l.0" encoding="UTF-8"?>

<html xmlns="http: //www.w3 . org/1999/xhtml">

<head>

<title>This is a sample word document</title>

</head>

<body>

<p>This is a sample word document.Samp;#xd; ilt;/p>

</body>

</htmligt;

l

myfile

Grant Ingersoll

l

Microsoft Word 11.3.5

Grant Ingersoll

600000000

Mon Jul 02 21:50:00 EDT 2007

This is a sample word document

application/msword

Mon Jul 02 21:51:00 EDT 2007

Из полученного результата видно, что возвращает Tika, и это позволяет правильно спланировать схему.

После того как схема определена, можно начинать процесс индексирования. Для этого документы посылаются обработчику ExtractingRequestHandler, который предоставляет инфраструктуру, необходимую Tika для извлечения содержимого. Чтобы воспользоваться классом ExtractingRequestHandler, необходимо настроить его в конфигурационном файле Soir. В данном случае файл sol г config. xml будет выглядеть следующим образом:

class=''org. apache. soir. handler. extraction .ExtractingRequestHandler">

last_modified

pageCount

creatOr

created

last_modified

last_modified

generatOr

mimeType

ignored_

Это файл уже находится в коде, сопровождающем книгу, так что к индексированию содержимого все готово. Вам нужно только послать Soir какие-нибудь документы. Мы снова воспользуемся программой curl, но в реальном приложении лучше бы иметь робот-обходчик или какой-нибудь код, получающий документы из хранилища (системы управления содержимым, базы данных и т. д.) и передающий их Soir с помощью клиентской библиотеки типа SolrJ.

Для демонстрации индексирования с помощью curl достаточно модифицировать показанную выше команду извлечения содержимого, убрав параметр extract. only и добавив несколько других:

curl "http://localhost:8983/solr/update/extract?

literal.id=sample-word.doc&defaultField=fullText&commit=true" -F "myfile=@src/test/resources/sample-word. doc"

Помимо указания загружаемого файла (флаг -F), следует отметить еще два момента:

  • • файл отправляется на URL-адрес /update/extract, а не просто /update. Для Soir это означает, что мы хотим использовать обработчик ExtractingRequestHandler, сконфигурированный выше.
  • • в данном случае передаются следующие параметры:
  • - literal.id=sample-word.doc: добавить литеральное значение sample-word.doc в качестве поля id документа. Иными словами, это уникальный идентификатор.
  • - defaultField=fullText: если возможно, Soir автоматически пытается сопоставить имена полей в извлеченном содержимом с именами полей Soir. Если совпадений не найдено, то с помощью этого параметра задается имя поля по умолчанию, в которое индексируется содержимое. В данном случае все неопознанное содержимое попадет в поле fullText.
  • - commit=true: это означает, что Soir должен сразу же фиксировать новые документы в индексе, чтобы они стали доступны для поиска.

На примере этой команды видны основн ые возможности обработчика ExtractingRequestHandler. О дополнительных его функциях читайте на странице hmt/Aviki.apache.orn/solг/ExtractintlReuiicstl land 1er.

Выполнение команд индексирования для вашего набора файлов должно дать похожие результаты - разумеется, с поправкой на содержимое ваших каталогов. Имея этот простой индекс, мы теперь можем посмотреть, какие результаты получаются при запросе к нему с помощью встроенного в Soir инструмента администрирования.

Совет. Программа Luke - ваш лучший друг во всем, что касается исследования структуры и содержимого индекса Lucene (и Soir). Эта программа, написанная Анджеем Бялецки (Andrzej Bialecki), полезна, когда нужно понять, как именно проиндексированы термы и какие документы хранятся в индексе. Она показывает и другие метаданные, например, 50 термов с наибольшей частотой в указанном поле. Программу Luke можно бесплатно скачать по адресу htto://code. google.com/D/luke/.

Итак, у нас есть непустой индекс и можно, наконец, пожать плоды своих трудов: посмотреть, как работает поиск в Soir. В следующем разделе мы воспользуемся клиентом SolrJ для отправки поисковых запросов и заодно выясним, как выглядят результаты.

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ ОРИГИНАЛ   След >