README.md

porcula-rs

Что это?

Это поиск по локальной коллекции книжек в формате FictionBook2 (например архивы librusec,flibusta)

В некотором смысле урезанный аналог MyHomeLib/Calibre/Simple OPDS.

Реализация на Rust

Цели

  • индексация FB2-книг внутри zip-файлов
  • полнотекстовый поиск по названию/автору/аннотации/тексту книги
  • выдача каталога в формате OPDS
  • примитивный веб-интерфейс, цель - работа на электронной читалке типа Onyx/PocketBook и ПК
  • просмотр книги в браузере как HTML
  • отсутствие runtime-зависимостей

Требования

  • ОС поддерживаемая Rust (Linux,Windows,MacOS,…)
  • для большой библиотеки требуется 64-битная ОС
  • место под базу - примерно 1/6 от объёма исходных файлов
  • для индексации желательно мощное железо (от 4 ядер, 16 ГБ памяти, SSD)
  • поиск в веб-приложении требует гораздо меньше ресурсов

Сборка

cargo build --release

В режиме debug скорость приложения на порядок ниже!

Для сборки на Windows требуется MinGW64

Установка

В релизе просто запакованный исполняемый файл.

Установки не требуется - просто распаковать его куда-нибудь на локальный диск, где достаточно свободного места.

Никаких runtime-зависимостей кроме обычно имеющейся библиотеки msvcrt/libc нет, но пока проверено только на Win 10 и Ubuntu 18/20.

Индексация

Для начала надо проиндексировать коллекцию книг.

По умолчанию индексируются только книги на русском, а в индекс включается не только название/автор/аннотация, но и ВЕСЬ текст книги.

Приложение консольное, нужно задать параметры индексации:

  • как минимум надо задать путь к книгам:

    porcula --books-dir=путь index

    В таком режиме работает долго (3-6 часов) и индекс для неназываемой раздачи получается 50 гигабайт. Скорость индексации на Ryzen 1700 + 16GB RAM + NVMe SSD: примерно 70 ГБ в час.

  • если нужен поиск слов во всех формах (без учёта склонения/спряжения):

    porcula --books-dir=путь index --lang=ru --stemmer=ru --xbody=on

  • если надо быстрее или места мало:

    porcula --books-dir=путь index --body=off --xbody=off

    В таком режиме индексация идёт пару часов, размер индекса - около 2 гигабайт.

  • ещё быстрее если отключить извлечение обложек и аннотаций:

    porcula --books-dir=путь index --body=off --xbody=off --annotation=off --cover=off

    Размер такого индекса - менее 200 мегабайт.

  • если нужны книги на нескольких языках:

    porcula --books-dir=путь index --lang=ru,en

Индексацию можно в любой момент прервать (Ctrl+C), а потом возобновить командой

porcula index

При этом используются предыдущие настройки индекса. Добавление нового архива с книгами делается этой же командой.

Если надо поменять настройки индекса, то придётся удалить подкаталог ‘index’ и проиндексировать командой:

porcula index full ...новые настройки...

Работа

После индексации (или в другом окне) надо запустить приложение без параметров - заработает локальный веб-сервер.

По адресу http://127.0.0.1:8083/porcula/home.html будет страница “Книги”.

Для доступа с других устройств нужно указать внешний IP-адрес или все доступные адреса:

porcula server --listen=0.0.0.0:5678

Ограничение доступа, шифрование трафика, логирование запросов в приложении не предусмотрены. Если это необходимо, то надо поднять полноценный веб-сервер (nginx,apache) и настроить http reverse proxy для приложения.

Пользовательский интерфейс

Web UI примитивный: есть страница поиска книг, каталог жанров, каталог авторов (только фамилии).

Синтаксис поиска частично совпадает с синтаксисом Lucene, краткая подсказка - по кнопке “?”.

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

По кнопке “Читать” запускается встроенный просмотр книги в новой вкладке браузера.

Чтобы открыть FB2 сторонним приложением надо нажать на название книги и ткнуть на картинку-обложку.

Если размер экрана по горизонтали менее 1200 пикселей включается “мобильный” режим: часть информации скрыта. Но пока с совместимостью на разных устройствах беда.

OPDS

Кроме веб-интерфейса, для поиска книг можно использовать мобильное приложение, которое умеет работать по протоколу OPDS.

Пока проверено только на FBReader под Android.

Каталог нужно добавить вручную, указав URL http://сервер:порт/porcula/opds

Другие настройки

Кроме настроек индекса есть ещё несколько параметров командной строки, которые влияют на скорость индексации и потребление ресурсов. Эти параметры в индексе не сохраняются.

porcula --help

porcula index --help

porcula server --help

Откуда есть пошло имя porcula

wiki:Карликовая свинья - то есть это мелкое приложение, активно хрюкающее жёстким диском :-)

Описание

база книг в формате FictionBook2 с полнотекстовым поиском

Конвейеры
0 успешных
0 с ошибкой