Как реализовать поиск по содержимому файлов(pdf, txt, rtf, doc, docx, excel)?
Есть инфоблок со статьями, к кажой статье могут прикрепляться n документов разного формата(множественное свойство типа файл).
Как реализовать поиск по содержимому этих прикрепленных файлов?
Задача нетривиальная. Первый раз с таким сталкиваюсь. Поскольку статей и файлов много, думал раз в сутки запускать крон, в нем уже в зависимости от расширения файла, подключать необходимую либу для работы с файлом, выгружать содержимое файла в виде текстовой информации в таблицу, в которой есть article_id и text , далее по полю text производить поиск. Более разумного решения почему то не вижу.
Дополнительно:
Ответы:
Если поле имеет тип "Файл" (E) и для него включена опция индексации содержимого, при этом на сайте установлен модуль "Поиск" (search), то можно можно подписаться на событие OnSearchGetFileContent модуля search (оно принимает только 1 параметр - абсолютный путь к файлу), а возвращает: либо null / false, либо структуру с результатами парсинга.
Структура с результатами парсинга - это массив с 2 обязательными ключами:
- CONTENT - строка(!)
- PROPERTIES - ассоциативный массив, в котором должен присутствовать обязательный аттрибут с "Код свойства страницы в котором хранятся теги" (из настроек модуля поиска).
Пример структуры:
$result = [ 'CONTENT' => 'содержимое файла, которое мы распарсили', 'PROPERTIES' => [ COption::GetOptionString("search", "page_tag_property") => 'тег1, тег2', ] ]; |
$result = [ 'CONTENT' => 'содержимое файла, которое мы распарсили', 'PROPERTIES' => [ COption::GetOptionString("search", "page_tag_property") => 'тег1, тег2', ] ];
- А как битрикс парсит разные файлы, например pdf, docx? Нужно ли подключать что нибудь стороннее?
- djacode, сам он никак это не парсит - он использует сторонние инструменты типа pdftotext, catdoc и другие.
- Андрей Николаев, Подскажите, а вот это : "включена опция индексации содержимого" это где настраивается?
Думал здесь, но такого тут нет
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Для реализации поиска по содержимому файлов различных форматов, таких как pdf, txt, rtf, doc, docx, excel, можно воспользоваться различными инструментами и библиотеками. Одним из распространенных подходов является использование библиотеки Apache Tika.
Apache Tika - это библиотека, которая позволяет извлекать текстовое содержимое из файлов различных форматов. Для работы с Apache Tika в PHP можно воспользоваться библиотекой php-apache-tika, которая обеспечивает простой доступ к функциональности Apache Tika из PHP.
Прежде всего, необходимо установить php-apache-tika, для этого можно воспользоваться Composer:
composer require jobapisearch/apache-tika-php
Далее, можно написать скрипт на PHP, который будет осуществлять поиск по содержимому файлов. Вот пример такого скрипта: