Import z Krameria
Modul services/harvester sklízí metadata z více nakonfigurovaných instancí Krameria do společného Solru. Podporuje API v5 a v7.
Předpoklady
- běžící Solr s cores
titlesaauthors, - platný
<user-home>/.kapp/app.conf, - dostupná API všech položek
instances, - funkční a perzistentní touch store,
- zapisovatelný adresář timestampů.
V produkci spouští harvester samostatná Compose služba. Lokálně:
.\mvnw.cmd -pl services/scheduler -am install -DskipTests
.\mvnw.cmd -f services/scheduler/pom.xml exec:java '-Dexec.args=harvester'
Běh přes instance
Pro každou instanci harvester:
- nastaví
.kapp/timestamps/<acronym>/timestamp, - načte poslední úspěšný čas, pokud existuje,
- sestaví dotaz a inkrementální filtr odpovídající verzi API,
- stránkuje přes cursor a stabilní identifikátor,
- doplní vazby monografií na
monographunit, - pro každý dokument stáhne MODS,
- vypočte MD5 a porovná jej s touch store,
- vytěží rok vydání, autory, identifikátory a sigly,
- vytvoří nový dokument nebo atomickou aktualizaci,
- vyhodnotí workflow a zapíše změnu stavu,
- odešle dávky titulů a autorů,
- přepočítá hierarchické rodiče,
- explicitně commituje
titlesaauthors, - uloží nový timestamp.
Timestamp se nesmí posunout po neúspěšném neúplném běhu.
API v5
Výběrový dotaz omezuje model na:
fedora.model:(monograph OR monographunit)
Používá starší pole, například PID, pid_path, root_pid, root_title, fedora.model, dc.title, dnnt-labels a dostupnost.
MODS:
<url>/item/<pid>/streams/BIBLIO_MODS
Inkrementální filtr:
modified_date:[<lastUpdated> TO *]
API v7
Výběrový dotaz zahrnuje:
model:(monograph OR monographunit OR periodical OR periodicalvolume)
Používá pole pid, own_pid_path, root.pid, root.title, model, titles.search, licenses_of_ancestors a licenses.
MODS:
<url>/items/<pid>/metadata/mods
Inkrementální filtr:
indexed:[<lastUpdated> TO *]
Při solrCloud:true se pro cursor používá compositeId, jinak pid.
Omezení počtu požadavků
API v7 respektuje hlavičku Retry-After. Po jejím obdržení nastaví globální prodlevu mezi dalšími požadavky; prodleva přetrvá během zpracování instance a před další instancí se vynuluje. Chyby při odesílání Solr dávky se opakují až desetkrát.
Nový a existující titul
Touch store určuje, zda PID už byl zpracován:
- v režimu
solrdotazem dotitles, - v režimu
filepomocí uloženého MD5 a pomocných souborů.
U existujícího titulu se kontroluje změna MODS a relevantní sigly. Kurátorsky spravovaná pole, zejména date_issued_year_kapp, musí zůstat oddělená od znovu sklizených hodnot.
Normalizace data vydání
Harvester čte text data z MODS, normalizuje známé nepřesné zápisy a parsuje rozsah. Pokud vstup vyžaduje zvláštní zásah nebo jej nelze bezpečně vyložit, přidá diagnostický štítek namísto tichého odhadu.
Výsledkem je zejména:
date_issued_str,date_issued_year,- případné diagnostické
labels.
Autoři
Autoři z MODS se ukládají do authors_kramerius a současně se doplňují do core authors. Autoritní identifikátory jsou normalizované. Kurátorské autory v authors_kapp sklizeň nemá přepsat.
Hierarchie
Monografie mohou mít podřízené monographunit; API v7 podporuje také periodika a svazky. Root tituly mají is_hierarchical:true. Po sklizni se stav rodiče přepočte podle dětí na PARENT_OPEN nebo PARENT_CLOSED.
Výsledek úspěšného běhu
- změněné tituly jsou commitnuté v
titles, - noví autoři jsou commitnutí v
authors, - nové tituly mají workflow stav, historii a přiřazenou licenci,
- zdroj je zachovaný v
digital_librarya licenčních polích instance, - timestamp instance odpovídá dokončenému běhu.