@djacode

Как получить данные проиндексированных файлов?

У меня стояла задача поиска по содержимому файлов прикрепленных к элементам инфоблока, сами файлы - множественное свойство типа файл. Я использую событие OnSearchGetFileContent . Контент парсится при помощи необходимых библиотек в зависимости от типа файла. ПОлучаю содержимое файла в ключе CONTENT, но почему то TITLE устанавливается именем элемента инфоблока а не именем файла как я прописываю в коде :
AddEventHandler("search", "OnSearchGetFileContent", array("FindInFiles", "OnSearchGetFileContent"));
class FindInFiles
{
    public static function OnSearchGetFileContent($absolute_path)
    {
        if(file_exists($absolute_path) && is_file($absolute_path) && substr($absolute_path, -3) == "pdf")
        {
            return self::processPdfFile($absolute_path);
        }
        else
            return false;
    }

 private static function processPdfFile($absolute_path) {
        $parser = new \Smalot\PdfParser\Parser();
        $pdf = $parser->parseFile($absolute_path);

        $text = $pdf->getText();

        return array(
            "TITLE" => basename($absolute_path),
            "CONTENT" => $text,
            "PROPERTIES" => [],
        );
    }

Что я делаю не так? И еще вопрос, у меня локально стоит поиск -mysql , на удаленной машине стоит Sphinx и почему то этот код вообще не работает( .
  • Вопрос задан
  • 33 просмотра
Пригласить эксперта
Ответы на вопрос 1
Real_Fermer
@Real_Fermer
Программист PHP
Проблема с установкой значения для ключа "TITLE" может возникать из-за того, что в вашем коде события OnSearchGetFileContent не учитывается возвращаемое значение функции processPdfFile.
class FindInFiles
{
    public static function OnSearchGetFileContent($absolute_path)
    {
        if(file_exists($absolute_path) && is_file($absolute_path) && substr($absolute_path, -3) == "pdf")
        {
            return self::processPdfFile($absolute_path);
        }
        else
            return false;
    }

    private static function processPdfFile($absolute_path) {
        $parser = new \Smalot\PdfParser\Parser();
        $pdf = $parser->parseFile($absolute_path);
        $text = $pdf->getText();
        $result = array(
            "TITLE" => basename($absolute_path),
            "CONTENT" => $text,
            "PROPERTIES" => [],
        );
        return $result;
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы