Dankzij real-time filtering bij de bron kunnen onderzoeksjournalisten, burgers en parlementariërs binnen seconden de juiste passages vinden tussen miljoenen bekendmakingen. En dat zonder concessies aan actualiteit.
Of je nu zoekt naar aanwijzingen van beleidswijziging, besluitvorming rond gevoelige dossiers of juridische gronden: de combinatie van UniversalSQL en de KOOP API’s biedt grip op het informatie-overaanbod.
In dit topic leer je hoe Invantive UniversalSQL de toegang tot KOOP-datasets zoals Officiele Publicaties automatisch enorm versnelt. De werking wordt geillustreerd aan de hand van SQL-statements in het Invantive Query Tool, maar geldt ook voor bijvoorbeeld Power BI, Excel en SQL Server Management Studio.
Performance
De performance van https://repository.overheid.nl is circa 100 rijen per seconde bij een paginagrootte van 1.000 rijen.
De driver werkt - net zoals alle andere Invantive-drivers - op basis van real-time queries voor maximale actualiteit. Met richting 6 miljoen bekendmakingen is het niet realistisch om elke opvraging 16 uur of langer te laten duren.
Gelukkig biedt de Invantive UniversalSQL-engine de mogelijkheid om filters door te geven, het zogenaamde “server-side filtering”.
En gelukkig ondersteunen de KOOP-databronnen via CQL als onderdeel van SRU 2.0 ook het gebruik van filters in een aantal scenario’s.
Voorbeeld Performancewinst Datumbereik
De volgende query vraagt alle mutaties van de afgelopen dagen op:
select *
from entries
where modified >= to_date('20250614', 'YYYYMMDD')
limit 50
De Invantive-engine gebruikt hiervoor een CQL-query op SRU:
https://repository.overheid.nl:443/sru?...&query=(c.product-area==officielepublicaties+and+(dt.modified>=2025-06-14))
welke in enkele seconden de eerste 50 mutaties van de dag geeft:
Een variant op deze query is:
select modified, *
from entries
where modified > to_date('20250614', 'YYYYMMDD')
limit 50
met de CQL-query op SRU:
https://repository.overheid.nl:443/sru?...&query=(c.product-area==officielepublicaties+and+(dt.modified>=2025-06-15))
De query levert geen resultaten. Gelukkig; dit zou kunnen neerkomen op anti-dateren. Echter, de CQL-query laat zien dat een >
herschreven wordt naar een >=
binnen CQL. De metadata van SRU geeft namelijk aan dat er geen >
ondersteund wordt op dit datumveld. De prestaties blijven goed door het om te zetten in een filter dat tenminste dezelfde rijen teruggeeft.
Voorbeeld Snel Zoeken op Deeltekst
Het is ook mogelijk om efficient te zoeken op bijvoorbeeld een deeltekst zoals dat de titel begint met ‘uitschrijving’ (in kleine letters):
select modified, *
from entries
where title like 'uitschrijving%'
limit 50
De SQL-engine genereert hiervoor de opvraging:
https://repository.overheid.nl/sru?...&query=%28c.product-area%3D%3Dofficielepublicaties+and+%28cql.textAndIndexes+%3D+uitschrijving%29%29
Deze opvraging maakt gebruik van cql.textAndIndexes
omdat de =
en ==
operator niet op teksten zoeken, maar op zoektermen. Zoeken met =
op de zoekterm uitschrijving
in de titel levert geen hits op voor een rij met de titel uitschrijvingen
.
cql.textAndIndexes
geeft aan dat ergens in de rij of gekoppelde (PDF-)documenten het woord uitschrijving
dient voor te komen. De KOOP API-server is goed in staat om een dergelijke vraag erg snel te beantwoorden. Mogelijk gebruikt deze technologie zoals ElasticSearch voor het snel doorzoeken van grote hoeveelheden data.
Uiteraard komen ook rijen terug die uitschrijving
in een gekoppeld PDF-document bevatten, of in een ander veld dan title
. Door client-side filtering worden deze alsnog achterwege gelaten in de resultaten.
Snel Zoeken op Meerdere Criteria
De optimalisaties die Invantive UniversalSQL toepast gaan verder dan enkel filteren op een veld. Om te komen tot constanten om door te geven worden expressies zoveel mogelijk geevalueerd en vereenvoudigd zodat bijvoorbeeld trunc(sysdateutc)
ook doorgezet wordt naar de KOOP API-server.
De engine geeft ook meerdere criteria door zoals blijkt uit:
select modified, *
from entries
where title like 'uitschrijving%'
and modified >= to_date('20250601', 'YYYYMMDD')
limit 50
met de bijbehorende CQL-query:
https://repository.overheid.nl/sru?...&query=(c.product-area==officielepublicaties+and+(cql.textAndIndexes+=+uitschrijving+and+dt.modified>=2025-06-01))
die na enkele seconden al de dataset teruggeeft: