Het zoekscherm stelt één vraag tegelijk aan meerdere bronnen en zet de antwoorden onder elkaar. Welke dat zijn, staat verderop op deze pagina. Het is te openen zonder account, op /zoeken. Wie het adres van de site intikt zonder pad erachter, komt vanaf versie 1.3.91 op dit scherm uit; tot en met versie 1.3.90 was dat de Startpagina. Die staat één klik verderop, als eerste vermelding in het menu na dit scherm.
Het lege scherm mag door een zoekmachine worden opgenomen; een adres mét zoekterm niet. Dat scheelt: een adres van dit scherm draagt de vraag van een bezoeker, en een zoekmachine die dat opneemt publiceert waar mensen naar zochten, adres voor adres. Tot en met versie 1.3.90 gold het verbod voor allebei, en daarmee ook voor de pagina waar de site op uitkomt.
Het is bedoeld voor de vraag waarbij een bezoeker nog niet weet wélke bron het antwoord heeft. Wie dat wel weet, is met de bron zelf sneller uit; de resultaten verwijzen daar dan ook naartoe.
Boven het zoekveld staat vanaf versie 1.3.91 hoeveel documenten er te doorzoeken zijn, in miljoenen, net als op de hoofdpagina. Tot en met versie 1.3.90 stond er "Zes openbare bronnen tegelijk". Het getal komt uit dezelfde gemeten telling als dat op de hoofdpagina, maar telt alleen de bronnen die DIT scherm doorzoekt: staat een bron uit, dan daalt het getal mee. Is er niets gemeten, dan valt het getal weg en staat de oude zin er.
De vier manieren om woorden te combineren
Onder het zoekveld staan vier keuzes. Zij beantwoorden verschillende vragen en het verschil is groot: dezelfde twee woorden leveren bij Officiële Bekendmakingen 3.339.913, 9.691 of 1.734 treffers op, afhankelijk van de keuze.
- alle woorden: elk woord komt voor in hetzelfde stuk. Dit is de standaard, omdat het is wat iemand meestal bedoelt door twee woorden in te tikken;
- een van de woorden: ten minste een van de woorden komt voor. Dit levert meer op en is nuttig bij synoniemen, bijvoorbeeld
stikstofvergunning stikstofrecht; - dicht bij elkaar: de woorden staan binnen tien woorden van elkaar. Dit is het verschil tussen "beide woorden staan ergens in dit stuk van tweehonderd bladzijden" en "beide woorden gaan over hetzelfde";
- precies deze woordgroep: de woorden staan aaneengesloten en in precies deze volgorde, bijvoorbeeld
Jan Jansen ACME. Dit is de strengste van de vier, en vanaf versie 1.3.74 te kiezen.
Ook "precies deze woordgroep" is een woordzoeker en geen letterzoeker. De bronnen doorzoeken woorden, niet losse tekens, dus een hoofdletter, een diakritisch teken of een leesteken kan onderweg verdwijnen. Wat vaststaat, is de VOLGORDE en de AANEENSLUITING: de drie woorden van het voorbeeld hierboven worden nooit los van elkaar of in een andere volgorde gevonden.
Wat elke keuze betekent, staat achter het vraagteken naast de vier. Er staat één uitleg per keuze en die staat er maar één keer.
Een zoekopdracht draagt hoogstens vier woorden. Wordt er meer ingetikt, dan zoekt het scherm op de eerste vier en zegt het welke woorden zijn overgeslagen.
Niet elke bron kan elke manier
Sommige bronnen kennen de gevraagde manier niet in hun eigen zoektaal. Het scherm lost dat op in plaats van de vraag te weigeren, en zegt per bron wat het heeft gedaan. In de kolom "Wijze" staat een van drie dingen:
- direct: de bron heeft de vraag zelf zo beantwoord;
- per woord, hier gecombineerd: de bron kent geen "of", dus is er per woord gezocht en zijn de uitkomsten hier samengevoegd. Het antwoord is hetzelfde, alleen kost het meer aanroepen;
- naast elkaar, strenger dan gevraagd: de bron kan geen nabijheid, dus is er gezocht op de woorden naast elkaar. Dat levert mínder op dan gevraagd, nooit meer.
Die laatste is de enige manier die niet af te leiden valt. Bij "of" en "en" gaat het om verzamelingen documenten, en die zijn te combineren. Nabijheid gaat over de plaats van woorden bínnen een document, en die informatie zit niet in een lijst documenten.
Welke bronnen worden doorzocht
Deze bronnen doen mee: Open Raadsinformatie, OpenBesluitvorming, OpenTK, Officiële Bekendmakingen, Rechtspraak en Open Archivaris. De naam van elke bron is een verwijzing naar de site van die bron zelf.
Het register van de Tweede Kamer doet niet mee, en dat is een bewuste keuze met twee gemeten redenen. Het antwoordt in 3 tot 15 seconden waar de andere zes onder de seconde blijven. En het doorzoekt alleen titels: op een steekproef van 120 stukken mist dat 59 tot 100 procent van de stukken die het woord wel in hun tekst hebben staan. Traag en onvolledig samen wegen zwaarder dan elk apart.
Er gaat niets verloren. De tekst van dezelfde kamerstukken zit in OpenTK, en het gepubliceerde kamerstuk in Officiële Bekendmakingen. Beide antwoorden binnen een seconde en beide doen wel mee.
Wat er tijdens het zoeken te zien is
De resultaten komen binnen terwijl er nog wordt gezocht. Bovenaan staat een tabel met een regel per bron, die laat zien welke bronnen al klaar zijn en welke nog bezig. Daaronder groeit de lijst met treffers, per bron bij elkaar.
Een bron die niets heeft gevonden blijft in de tabel staan, met "klaar" en nul treffers. Dat is met opzet: "doorzocht en niets gevonden" en "niet doorzocht" zijn verschillende uitkomsten, en het scherm mag die niet op elkaar laten lijken. De vijf uitkomsten zijn:
- bezig: de bron is nog aan het zoeken;
- klaar: de bron heeft geantwoord, met of zonder treffers;
- te traag: de bron heeft niet binnen tien seconden geantwoord;
- afgebroken: de bron was nog bezig toen de zoekactie stopte;
- mislukt: de bron gaf een fout.
Zodra alle bronnen klaar zijn, klapt de tabel dicht tot één regel. Een klik erop opent hem weer.
Elke bron levert ten hoogste honderd treffers per zoekactie, vanaf versie 1.3.86. Heeft een bron er meer dan honderd, dan staat in de kolom "Treffer" niet alleen het aantal dat is opgehaald, maar ook het totaal bij die bron, bijvoorbeeld "100 van 129". Dat totaal staat er alleen wanneer een bron meer heeft dan is opgehaald; liet een bron alles zien, dan staat er enkel het aantal. Tot en met versie 1.3.85 lag de grens op vijfentwintig treffers en stond er geen totaal bij, waardoor een gewone zoekopdracht bij meerdere bronnen tegelijk hetzelfde getal kon laten zien zonder te zeggen dat dat een grens was en geen telling.
Onder het zoekveld staat, naast de manier van combineren, een tweede keuze: "Aantal per bron". Vier mogelijkheden, elk als apart bolletje: 100, 500, 1000 of het maximum van de bron zelf. Bij 500, 1000 of het maximum haalt het scherm zo nodig meerdere pagina's bij dezelfde bron op, tot het gevraagde aantal is bereikt of de bron niets meer heeft, vanaf versie 1.3.86. Wie het adres met de hand aanpast naar een andere waarde dan de vier genoemde, krijgt honderd terug: nooit een hoger aantal dan wat op het scherm te kiezen viel.
Een bron kan ook een eigen, harde grens hebben die geen enkele keuze hier kan verhogen: OpenTK bijvoorbeeld geeft nooit meer dan tweehonderdtachtig treffers voor één zoekopdracht, wat er ook wordt gevraagd. Is dat het geval, dan staat het aantal in een grijs bolletje in plaats van het gewone oranje, zowel bovenaan in de tabel als bij de bron zelf verderop, met de tekst "meer kan niet" erbij. Dat grijze bolletje is met opzet een andere kleur dan het oranje "100 van 129": bij oranje helpt een hogere keuze wel, bij grijs nooit.
De twee klokken
Elke bron krijgt dertig seconden, vanaf versie 1.3.86 (was tien). Wie er langer over doet, krijgt "te traag" en houdt de rest niet op. De ruimere grens komt door het ophalen van meerdere pagina's bij één bron: dat kost meer tijd dan één opvraging.
De hele zoekactie duurt hoogstens negentig seconden, vanaf versie 1.3.86 (was dertig). Dat is geen melding maar een afbreking: wat dan nog loopt, wordt bij de bron zelf afgebroken. Er is ook een knop "Afbreken", voor wie eerder genoeg heeft gezien.
Een resultaat openen
Elke treffer heeft een verwijzing naar het stuk bij de bron zelf, niet naar een kopie hier. Dat is het punt van BesluitBron: een lezer gaat naar de bron en leest daar het origineel.
Levert een bron geen adres, dan staat er "toon het record" in plaats daarvan. Dat opent de gegevens die de bron wél heeft teruggegeven. Die tekst komt van een derde partij en wordt getoond zoals zij is aangeleverd.
Filteren op datum
Wie veel treffers krijgt, kan die achteraf versmallen tot een periode. Dat gebeurt in de browser zelf, op de treffers die al zijn opgehaald, en dus zonder opnieuw te zoeken. Het venster "Filter op datum" staat onder de teller, vanaf versie 1.3.85.
Er zijn drie manieren om een periode te kiezen:
- een snelkeuze: "Afgelopen jaar" (de 365 dagen tot vandaag), "Dit jaar" of "Vorig jaar";
- een jaar uit de lijst. Alleen een jaar waarin ook echt een treffer is gevonden staat erbij;
- een eigen begin- en einddatum. Een lege datum betekent dat die kant openstaat.
Een treffer zonder datum wordt verborgen zodra een periode is gekozen. Een teller erbij zegt hoeveel treffers dat zijn, en een schakelaar toont ze alsnog.
Het filter verandert niets aan wat een bron zelf zegt te hebben gevonden. De teller onder een bron blijft het geladen aantal en het totaal bij de bron tonen, naast het aantal dat nu wordt getoond. Het filter versmalt dus alleen wat AL is opgehaald, ten hoogste de eerste pagina per bron, en niet wat de bron in totaal heeft: wie een periode zoekt die buiten die eerste pagina valt, zoekt beter met het jaartal als los woord, waar een bron dat aankan.
De drie exports volgen hetzelfde filter: wie eerst versmalt en dan naar Excel, ODS of Markdown exporteert, krijgt de versmalde lijst en niet de hele.
Uitvoeren naar Excel, ODS of Markdown
Onder de teller staan drie knoppen. De eerste twee leveren hetzelfde werkboek, in de opmaak van Excel of in die van OpenDocument.
Het eerste blad heet "Parameters" en staat er niet voor de sier: daar staat de zoekterm, de manier van combineren, het moment, de duur, en per bron het aantal treffers, de duur, de uitkomst en, vanaf versie 1.3.70, de opmerking die het scherm onder die bron toont, bijvoorbeeld dat een bron traag was of dat het aantal een schatting is. Een lijst met rijen kan over drie maanden niet meer zeggen wát er is gevraagd, welke bron nog liep, of waarom een aantal afwijkt. Daarna volgt één blad per bron die treffers had; een bron zonder treffers krijgt geen blad en staat alleen op het eerste blad.
De derde knop levert hetzelfde antwoord als Markdown-bestand, vanaf versie 1.3.70. Dat is geen derde export ernaast, maar dezelfde inhoud als het scherm zelf: dezelfde titel, dezelfde tabel met bronnen, dezelfde opmerking onder een bron die traag was of minder telt, en per treffer dezelfde titel, context, datum en soort match. Een titel met adres is een aanklikbare verwijzing naar de bron; een treffer zonder adres krijgt net als op het scherm het teruggegeven record, hier ingeklapt onder een uitklapbaar kopje. Een cirkeldiagram in Mermaid laat in één oogopslag zien welke bron het meeste bijdroeg. Het bestand opent leesbaar in Obsidian en in Discourse, en is ook bedoeld om in zijn geheel aan een AI-assistent te geven als bronmateriaal.
De kop van het Markdown-bestand bevat alles om de zoekactie opnieuw te doen, zonder dat de site erbij hoeft te worden geopend: het adres waarmee dezelfde zoekactie opnieuw kan worden gevraagd, de zoekterm, de losse woorden, de gekozen manier van combineren, het moment en de duur van de zoekactie, en het aantal treffers in totaal en per bron. De status staat daar vast op "definitief": dit is een opname van één zoekactie op één moment, geen pagina die later wordt bijgewerkt.
Alle drie de bestanden noemen BesluitBron als maker. Er staat nooit een persoonsnaam in.
Uitvoeren naar ZIP
Naast de drie knoppen staat een vierde: ZIP, vanaf versie 1.3.88. Dat bestand bevat het Markdown-verslag van hierboven, en daarnaast één map per bron die treffers had, met daarin één bestand per treffer.
Van een treffer wordt het eigen document van de bron opgehaald wanneer dat kan: een PDF, of een ander bestand dat de bron zelf aanbiedt. Kan dat niet, dan komt in plaats daarvan het ruwe record van die treffer in het bestand, als JSON. Dat tweede is geen tekortkoming van deze knop: bij een aantal bronnen bestaat er voor die treffer geen apart document, en het record is dan precies wat het scherm ook al toont onder "toon het record".
Elk bestand krijgt een naam opgebouwd uit de datum, de organisatie en de titel van de treffer, bijvoorbeeld 20170905-gemeente roermond-zonder titel 1.pdf. Een titel die de bron niet heeft, wordt genoemd zoals het scherm dat zelf doet. Twee treffers die tot dezelfde naam zouden leiden, worden uit elkaar gehouden met een volgnummer.
Deze knop haalt daadwerkelijk documenten op bij de bronnen, in plaats van er alleen naar te verwijzen, en dat kost meer tijd dan de andere drie knoppen: bij "maximum van de bron" kan dat oplopen tot honderden documenten in één download. Daarom wordt eerst een schatting getoond, "1 seconde per document", samen met het aantal bestanden en een keuze: "Downloaden" of "Annuleren". De knop werkt daarom alleen met JavaScript: de browser voert eerst een klein rekenwerkje uit voordat de download begint, wat een geautomatiseerd script ontmoedigt zonder dat daar een externe dienst voor nodig is.
Bij die schatting staat ook een wachtwoord. Het bestand wordt daarmee versleuteld, en zonder dat wachtwoord is het niet te openen. Dat wachtwoord staat op hetzelfde scherm als de schatting, met opzet: het houdt geen script tegen dat deze pagina zelf leest, dat wachtwoord kan het net zo goed lezen als een bezoeker. Het maakt het wel lastiger om het bestand achteloos door te sturen zonder dat de ontvanger het wachtwoord ook krijgt. Een installatie kan deze versleuteling uitzetten.
In welke taal het scherm antwoordt
Het scherm volgt de taal van de pagina. BesluitBron onderhoudt vier talen: Nederlands, Engels, Duits en Frans. In een andere taal valt de tekst terug op het Nederlands, zoals overal op deze site.
Vanaf versie 1.3.61 geldt die taal voor alles wat het scherm zelf schrijft: de uitkomst per bron, de kolom "Wijze", de opmerking onder een bron, de labels in het werkboek en de naam van het bestand dat wordt gedownload. Tot en met versie 1.3.60 was dat alleen Nederlands, ook op een Engelse pagina.
Van een treffer wordt alleen de titel vertaald, en alleen wanneer de pagina niet Nederlands is: context, datum en fragment komen van de bron en blijven staan zoals die bron ze levert. Een titel die nog niet bekend is, wordt ter plekke vertaald door DeepL, dezelfde dienst die ook deze documentatie vertaalt. Onder een vertaalde titel staat een klein knopje "toon origineel" waarmee de eigen woorden van de bron te zien zijn; een klik erop wisselt naar "toon vertaling" om terug te gaan.
Wat het scherm niet doet
- De resultaten van verschillende bronnen worden niet door elkaar gerangschikt. Elke bron heeft een eigen manier van scoren en die zijn niet met elkaar te vergelijken; een gemengde lijst zou een volgorde suggereren die niemand heeft gemeten;
- Dubbele stukken worden niet weggehaald. Open Raadsinformatie en OpenBesluitvorming halen dezelfde raadsstukken op, en dat is een eigenschap van het landschap die het scherm laat zien in plaats van verbergt;
- Er is geen "niet"-optie. Anders dan bij "of" en "en" is die niet eerlijk af te leiden uit een afgekapt venster;
- De lezer zelf kan niet doorbladeren. Het scherm haalt zelf meerdere pagina's op bij een bron zodra "Aantal per bron" dat vraagt, vanaf versie 1.3.86, maar altijd tot precies die gekozen grens en nooit verder op verzoek van de lezer; wie meer wil dan de vier keuzes toestaan, gaat naar de bron zelf of naar de verkenner ervan.
Voor een programma: /api/search.json
Dezelfde zoekactie is ook op te vragen als gegevens in plaats van als pagina, op /api/search.json, vanaf versie 1.3.86. Dat adres antwoordt in één keer, zodra elke bron klaar is, in plaats van terwijl er nog wordt gezocht. Het deelt hetzelfde budget van één zoekactie per seconde met dit scherm. Zie Zoekresultaten.
Wat er wordt vastgelegd
Elke aanroep naar een bron wordt vastgelegd in het aanroeplogboek, onder de categorie SEARCH. Eén zoekactie levert dus zes regels op, één per bron, met dezelfde verwijzing naar het verzoek. Wat er in dat logboek staat en hoe lang, staat in Privacy en Cookies.