home

В поиск по документам в сущности PDF больше не включаются страницы

Наверное замечали, что поиск иногда работает очень медленно?

Причина заключается в том, что на одной из итераций по изменению поиска вес извлеченный из PDF текст (и из прикрепленных документов тоже) начал попадать в сущность документа.

Если в PDF 500 страниц, значит текст с 500 страниц оказывался не только в 500 фрагментах (которые ищутся отдельно), но и в сущности документа.

Когда поиск находил этот документ по инвертированному индексу, запускалась задача на подсветку найденных слов и эту подсветку надо было сделать с текста объемом в 500 страниц. Даже если подсветка одну страницу текста обрабатывает 1 мс, 500 страниц - это пол секунды на подсветку одного найденного документа. Если по запросу нашлось 10 документов по 500 страниц, то подсветка займет 5 секунд.

Т.о. скорость работы поиска сильно зависит от того, попадется ли в выдачу (в подсветку попаданий) документ с большим количеством страниц.

Кроме того, такой подход выталкивает в выдаче вверх документы, а не страницы, что не всегда желательно.

По такой же причине были проблемы со скоростью работы виджета рекомендательных ресурсов: https://elibsystem.ru/node/567.

Решено подход изменить и посмотреть что получится, поэтому на очередной итерации сделан откат части изменений предыдущей и теперь текст со страниц PDF остается только для фрагментов, а вся совокупность со всех страниц к сущности ноды больше не прикрепляется.

Это должно ускорить поиск, но выдача результатов несколько изменится и страницы в топ выдачи теперь будут попадать чаще, чем раньше.

Все описанное относится только к типам PDF и Ebook (устаревший модуль работы с PDF). Если вы эти модули не используете, все написанное здесь для вас не важно.

Итак, подход изменился и в новых документах PDF к сущности документа текст со страниц не прикрепляется. Но как быть со старыми документами, которые уже в индексе?

Надо переиндексировать существующие документы как это написано в документации: https://elibsystem.ru/docs/admin/elis_search.html#drush-elis-search-reindex

Здесь тоже есть небольшое изменение: при переиндексировании иногда падает процесс из-за исчерпания памяти или по другим причинам. Теперь в drush можно повторно запустить переиндексирование и если произойдет падение на том же документе, с которого была предыдущая попытка, то документ будет пропущен и индексирование продолжится со следующего. Т.е. если переиндексирование падает, надо просто запустить его еще раз.

Там же приводится скрипт на bash, который запускает переиндексирование 10 раз подряд на случай если у вас индекс большой и индексирование может занять неделю, чтобы руками не отслеживать падение индексации.

Также теперь скрываются ошибки Apache Tika, так как в них Apache Tika выводила предупреждения об отсутствии библиотеки для индексации SQlite и JPEG2000 и тем смущала администраторов при миграции, которые воспринимали предупреждения как ошибки.

Обратите внимание, из прикрепленных файлов до сих пор извлекается текст и присоединяется к сущности документа, поэтому если прикрепленный документ будет иметь много текста, подсветка синтаксиса все еще будет долгой.