librarian: prosty cache wyników wyszukania #19

Merged
gitea merged 1 commits from librarian-search-cache into main 2026-08-03 18:36:24 +00:00
Owner

Stackowane na #18 — zmerguj #18 najpierw, wtedy pokaże już tylko swój commit.

Po co

Powtórka tego samego wyszukania (znormalizowany query) zwraca zapisane trafienia i pomija cały Crossref + skan bazy. Nic wymyślnego — dokładne (znormalizowane) dopasowanie, nie fuzzy.

Jak

  • Klucz: query po lower() + zwinięte białe znaki, osobno dla deep vs shallow (dają różne wyniki).
  • Dysk (przeżywa restart, przez DiskQueue), TTL (CONJURER_LIBRARIAN_CACHE_TTL, domyślnie 7 dni; 0 wyłącza), limit rozmiaru (CONJURER_LIBRARIAN_CACHE_MAX, domyślnie 500, przycinany).
  • Sprawdzany przed Crossrefem tylko dla świeżego wyszukania (wznowienie z checkpointu dalej kontynuuje skan), zapisywany po zakończonym.
  • To kilka linijek — reużywa DiskQueue.

Testy

hit/miss, normalizacja, rozdział deep/shallow, wygaśnięcie, wyłączenie (TTL=0), przycinanie. Suite: 58 unit + 59 integration zielone.

🤖 Generated with Claude Code

> **Stackowane na #18** — zmerguj #18 najpierw, wtedy pokaże już tylko swój commit. ## Po co Powtórka tego samego wyszukania (znormalizowany query) zwraca zapisane trafienia i **pomija cały Crossref + skan bazy**. Nic wymyślnego — dokładne (znormalizowane) dopasowanie, nie fuzzy. ## Jak - Klucz: query po `lower()` + zwinięte białe znaki, osobno dla deep vs shallow (dają różne wyniki). - **Dysk** (przeżywa restart, przez `DiskQueue`), **TTL** (`CONJURER_LIBRARIAN_CACHE_TTL`, domyślnie 7 dni; `0` wyłącza), **limit rozmiaru** (`CONJURER_LIBRARIAN_CACHE_MAX`, domyślnie 500, przycinany). - Sprawdzany **przed Crossrefem** tylko dla świeżego wyszukania (wznowienie z checkpointu dalej kontynuuje skan), zapisywany **po** zakończonym. - To kilka linijek — reużywa `DiskQueue`. ## Testy hit/miss, normalizacja, rozdział deep/shallow, wygaśnięcie, wyłączenie (TTL=0), przycinanie. Suite: **58 unit + 59 integration** zielone. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
gitea self-assigned this 2026-08-03 18:08:08 +00:00
gitea added 1 commit 2026-08-03 18:08:09 +00:00
Librarian: simple result cache for repeated queries
CI / compile (pull_request) Successful in 8s
CI / unit (pull_request) Successful in 26s
CI / integration (pull_request) Successful in 26s
build / build (push) Successful in 25s
CI / compile (push) Successful in 9s
CI / unit (push) Successful in 27s
CI / integration (push) Successful in 27s
f4dea53502
A repeat of the same query (whitespace/case-normalised, scoped by
deep-vs-shallow) returns the stored hits and skips the whole Crossref call
and DB scan. Disk-backed (survives restart), TTL'd
(CONJURER_LIBRARIAN_CACHE_TTL, default 7d; 0 disables) and size-bounded
(CONJURER_LIBRARIAN_CACHE_MAX, default 500). Reuses DiskQueue, so it's a
handful of lines. Nothing fancy - exact (normalised) match, not fuzzy.

Checked before Crossref only on a fresh search (a resume from checkpoint
still continues its scan), and stored after a completed search.

Tests: hit/miss, normalisation, deep/shallow separation, expiry, disable,
prune. Suite: 58 unit + 59 integration green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
gitea merged commit f4dea53502 into main 2026-08-03 18:36:24 +00:00
gitea deleted branch librarian-search-cache 2026-08-03 18:36:25 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gitea/conjurer#19