Индексируйте содержимое PDF-файлов с помощью Solr и Tika

Кратко о проблеме: я хотел бы, чтобы Sitecore индексировал содержимое PDF-файлов, используя встроенные функции Solr (предоставляемые Tika). Я не знаю, как настроить индексирование Sitecore для использования этой функции в Solr (Tika). (Я думаю, мне нужно написать собственный индексатор.)

Я работаю с Sitecore 7 (7.1, обновление 1) и хочу индексировать контент из PDF-файлов (или других типов мультимедиа). Я хотел бы проиндексировать эти данные для целей поиска.

У меня установлен Solr (4.6.1), и он работает с Sitecore 7. Когда я индексирую свой сайт, он сохраняет все документы в правильном ядре Solr, и я могу успешно получить эти документы для отображения.

Используя curl, я могу отправить PDF-файл в свой экземпляр Solr и проиндексировать его.

curl "http://localhost:8983/solr/update/extract?literal._id=doc1&uprefix=attr_&fmap.content=attr_content&commit=true" -F "[email protected]"

Это работает, и я могу читать этот контент в своем веб-проекте Sitecore и отображать его в представлениях, поэтому я знаю, что могу получить доступ к этим данным. Однако я хотел бы, чтобы данные были прикреплены к элементам, которые я загрузил в Sitecore.

Я бы хотел, чтобы что-то подобное происходило, когда я загружаю PDF-файл в медиатеку Sitecore и публикую элемент или, по крайней мере, когда я повторно индексирую сайт.

В настоящее время я просматриваю следующий учебник, чтобы узнать кое-что о написании пользовательского индексирования (вот ссылка на часть 1): http://www.sitecore.net/Community/Technical-Blogs/Getting-to-Know-Sitecore/Posts/2013/04/Sitecore-7-Search-Provider-Part-1-Manually-Triggered-Indexing.aspx

Спасибо за ваше терпение.


person Erik Christianson    schedule 13.02.2014    source источник


Ответы (3)


Для Sitecore при обработке мультимедийных данных Lucene и Solr должны были индексировать контент согласованным образом (чтобы вы могли переключаться между ними при необходимости и по-прежнему индексировать данные таким же образом). Поскольку интеграция с Tika во многом относится к Solr, было решено, что оба должны использовать общую концепцию окон IFilter для индексации (http://en.wikipedia.org/wiki/IFilter)

Это означает, что до тех пор, пока у вас есть правильный IFilter для этого типа mime, установленный на машине, выполняющей индексацию, вычисляемое поле _content будет заполнено выходными данными.

Это не означает, что вы не можете использовать интеграцию Solr Tika, но она не поддерживается по умолчанию и требует настройки.

Было бы очень просто:

  1. Отключить вычисляемое поле _content
  2. Настройте обработчик конвейера публикации, который просматривает каждый публикуемый элемент.
  3. Проверьте, является ли это элементом мультимедиа
  4. Проверьте, является ли это PDF
  5. Выдает команду для отправки контента на ваш сервер Solr для индексации Tika.

Вы можете посмотреть, какие результаты вы получите, используя IFilter, если результаты достаточно близки к тому, что вы хотите, вы можете пойти с этим, если Tika дает лучшие результаты для вас, тогда вы сможете переключиться на это, хотя вы, вероятно, проиндексировали бы свой медиаконтент в отдельном ядре Solr, поэтому вы потеряли бы все метаданные, специфичные для Sitecore, вокруг документа.

Некоторые сообщения в блоге, которые могут быть полезны:

http://www.samjgriffin.com/blog/2013/11/06/sitecore-7-pdf-and-document-content-search/

http://www.sitecore.net/Community/Technical-Blogs/John-West-Sitecore-Blog/Posts/2013/04/Sitecore-7-Indexing-Media-with-IFilters.aspx

person Stephen Pope    schedule 14.02.2014

Я поддерживаю рекомендацию использовать встроенный в Sitecore подход MediaItemContentExtractor + IFilter, если вы уже не исключили это по какой-либо причине (Возможно, трудности с IFilter). Однако, если IFilter не подходит или если вас интересует другой подход, я бы интегрировал Tika немного иначе, чем предложил Стивен.

Учебное пособие, на которое вы ссылаетесь, посвящено написанию собственного поставщика поиска, то есть полной замене встроенного поставщика. Вы должны иметь возможность использовать поставщика Solr от Sitecore и выполнять то, что вам нужно, с помощью чего-то более легкого: поля вычисляемого индекса. Упомянутый выше встроенный экстрактор мультимедиа использует этот подход, который позволяет помещать в индекс практически все, что угодно во время обычного процесса индексирования. Вот сообщение в блоге Джона Уэста, в котором рассказывается о создании базового поля вычисляемого индекса: Sitecore 7: поля вычисляемого индекса.

Короче говоря, напишите класс, который реализует IComputedIndexField и представляет содержимое, извлеченное из PDF-файлов или других богатых документов. В вашей реализации метода ComputeFieldValue:

  • Позвоните GetMediaStream() по документу.
  • Передайте поток Solr в команде только для извлечения и зафиксируйте результат.
  • Верните этот результат, чтобы сохранить его в поле вычисляемого индекса.

Если вам нужно, чтобы мультимедийный контент находился в определенном существующем поле индекса, настройте вычисляемое поле как скопировать поле (см. 3.3.3) в существующее поле. В противном случае настройте поиск так, чтобы он ссылался на вычисляемое поле.

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

Еще одним потенциальным вариантом может быть задача после перестроения для добавления медиаконтента к существующим проиндексированным документам. Я не уверен, что это сработает. Это зависит от знания идентификаторов документов элементов мультимедиа и фиксации расширенного содержимого документа в частичные обновления документа, которые этому человеку попытка не удалась. Если вы попробуете это, обязательно выполните его в событии indexing:end до очистки кеша HTML.

Какой бы подход вы ни выбрали, если вы хотите работать с Tika на более высоком уровне, чем cURL, взгляните на Реализация SolrNet ExtractCommand и связанных классов.

person Kimberly    schedule 14.02.2014

Если вы можете обновить свой сайт до версии sitecore 7.2, в которой содержимое элементов мультимедиа будет индексироваться автоматически и нет необходимости устанавливать соответствующий фильтр IFilter, вам следует прочитать следующее: Индексирование медиаконтента в sitecore 7.2

person Mohammed Syam    schedule 17.08.2015