Как реализовать поиск по содержимому файлов(pdf, txt, rtf, doc, docx, excel)?

Ссылка скопирована
1 ответ

Есть инфоблок со статьями, к кажой статье могут прикрепляться 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)?

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Роман IT Ответ

Для реализации поиска по содержимому файлов различных форматов, таких как 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

composer require jobapisearch/apache-tika-php

Далее, можно написать скрипт на PHP, который будет осуществлять поиск по содержимому файлов. Вот пример такого скрипта:

require 'vendor/autoload.php';

use JobApis\Tika\Client;

$client = new Client();

$files = ['file1.pdf', 'file2.txt', 'file3.docx'];

$searchTerm = 'example';

foreach ($files as $file) {
$content = $client->getText($file);

if (stripos($content, $searchTerm) !== false) {
echo "Search term found in file: $file

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно