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 с ошибкой