Scoreberekening bij zoeken op adressen/percelen gaat niet helemaal lekker bij exacte match op straatnaam=West

Namens gemeente Koggenland tegen het volgende probleem aangelopen. In Avenhoorn bestaat een straatnaam genaamd West. Er zijn daar ook percelen van de oud-gemeentenaam Wester-Koggenland.

We zoeken met 1 zoekopdracht zowel adressen als percelen.
Het blijkt nu dat de score bij West voor adressen van straatnaam West lager is dan percelen van Wester-Koggenland.
Dat lijkt me niet juist. Zeker als er een exacte match is op straatnaam dan zouden adressen met huisnummers een hogere score moeten hebben dan perceelnummers.

Het gaat om de volgende zoekopdrachten:

  1. Ik zoek op “West”. Bij deze verwacht ik als eerste straatnaam West in Avenhorn (dat klopt ook) en daarna de adressen van straatnaam West. Dat laatste gebeurt niet, er verschijnen perceelnummers.

https://geodata.nationaalgeoregister.nl/locatieserver/v3/suggest?fq=*:*&wt=xml&sort=score desc, sortering asc&q=west+and+%28gemeentenaam%3A%22Koggenland%22+or+kadastrale%5Fgemeentenaam%3A%22Koggenland%22+or+gemeentenaam%3A%22Wester%2DKoggenland%22+or+kadastrale%5Fgemeentenaam%3A%22Wester%2DKoggenland%22%29&rows=21

  1. Ik zoek op “West 50”. Bij deze verschijnt niet het adres “West 50, Avenhorn” als eerste maar allerlei perceelnummers van Wester-Koggenland met een perceelnummer dat begint met 50.

https://geodata.nationaalgeoregister.nl/locatieserver/v3/suggest?fq=*:*&wt=xml&sort=score desc, sortering asc&q=west+50+and+%28gemeentenaam%3A%22Koggenland%22+or+kadastrale%5Fgemeentenaam%3A%22Koggenland%22+or+gemeentenaam%3A%22Wester%2DKoggenland%22+or+kadastrale%5Fgemeentenaam%3A%22Wester%2DKoggenland%22%29&rows=21

Je requests zijn sowieso niet goed volgens mij. Ik krijg een Solr foutmelding vanwege fq=:

Er gaat iets fout bij het omzetten in html van de URL bij het antwoorden op dit Forum.

Op de plaats van : staat bij mij een * gevolgd door : en dan een *

Bepaalde “vreemde” leestekens worden door het forum gebruikt voor tekst opmaak, die moet je escapen door bijvoorbeeld de tekst in een code block te zetten of er een URL/link van met maken.

Eerste link

Tweede link

1 like

Voor debuggen heb ik je request op een paar punten aangepast: wt=json (vind ik wat overzichtelijker), sort weglaten (waarde is volgens mij gelijk aan defaultwaarde), rows=10, fl=* en debug=all.

Ik heb geen oplossing, maar zie wel een aantal opvallende dingen.

In de response van het aangepaste request staat:

originalTerms=[westelijke, wester, w, west, and, koggenland, oranje, or, koggenland, oranje, or, west, westelijke, w, wester, koggenland, oranje, or, west, westelijke, w, wester, koggenland]}

Het eerste wat opvalt: je zoekt ook op ‘and’ en ‘or’, terwijl je dit bedoelt had als logische operatoren. Dit probleem los je op door er hoofdletters van te maken.

Als ik je goed begrijp, is het je bedoeling om alleen binnen de gemeente Koggenland, de oud-gemeente Wester-Koggenland en de kadastrale gemeenten Koggenland en Wester-Koggenland te zoeken. Dan kun je naar mijn idee beter een filter query definiëren: fq=gemeentenaam:Koggenland OR kadastrale_gemeentenaam:Koggenland OR kadastrale_gemeentenaam:'Wester-Koggenland'
Strikt genomen is de laatste clausule volgens mij overbodig, want als je binnen kadastrale gemeentenaam zoekt op Koggenland, vind je ook Wester-Koggenland. Zoeken op gemeentenaam Wester-Koggenland heeft sowieso geen zin, want die gemeente bestaat niet meer.

Je moet geen dubbele aanhalingstekens in het request gebruiken, maar enkele.

Als je zoekt op “west”, zoekt LocatieServer ook automatisch op “westelijke”, “w”, “wester”. Meestal is dat handig, maar dat werkt in jouw geval juist tegen (vooral “w” als synoniem, denk ik). Voor zover ik weet, kun je in je request geen parameter toevoegen om dit uit te schakelen.

Als je na deze aanpassingen het request opnieuw uitvoert, krijg je ineens allemaal buurten terug. Dat kun je voorkomen met een tweede filter query: fq=type:adres OR type:weg OR type:perceel

Aangepaste request: https://geodata.nationaalgeoregister.nl/locatieserver/v3/suggest?wt=json&rows=25&q=west&debug=all&fq=gemeentenaam:Koggenland OR kadastrale_gemeentenaam:Koggenland OR kadastrale_gemeentenaam:‘Wester-Koggenland’&fl=type, weergavenaam, gemeentenaam, kadastrale_gemeentenaam, score&fq=type:adres OR type:weg OR type:perceel

Zoeken op “West 50” gaat met de aanpassingen volgens mij nu wel goed.

Hier houdt het voor mij even op. Je zou de boosting parameters nog kunnen tweaken, maar daar weet ik niet veel van. Volgens mij zie ik in de response staan dat wegen meer gewicht krijgen dan adressen:

type:provincie^1.5 type:gemeente^1.5 type:woonplaats^1.5 type:weg^1.5 type:postcode^0.5 type:adres^1.0

Als ik het free in plaats van suggest endpoint gebruik, krijg ik veel betere resultaten. Misschien biedt dat ook nog een aanknopingspunt voor het zoeken naar een oplossing:
https://geodata.nationaalgeoregister.nl/locatieserver/v3/free?wt=json&rows=25&q=west &debug=all&fq=gemeentenaam:Koggenland OR kadastrale_gemeentenaam:Koggenland OR kadastrale_gemeentenaam:‘Wester-Koggenland’&fl=type, weergavenaam, gemeentenaam, kadastrale_gemeentenaam, score&fq=type:adres OR type:weg OR type:perceel

Bedankt voor je reactie, dit zette mij op het goede spoor!

Het was eenvoudig oplosbaar door het gemeente-filter in q= af te splitsen naar fq=
Ik hoefde niet de " aan te passen naar ’ in de fq=
Er zijn immers ook gemeentenamen met een ’ in de naam.
De OR wel of niet in hoofdletters in fq= maakt niet uit.

Er komen dan bij zoeken op alleen “West” ook namen van buurten terug maar dat is minder erg. De perceelnummers zijn dan weg en dat is goed.
Het is alleen jammer dat er geen adressen met huisnummers van straat “West” bij de resultaten staan. Dat is bij andere straatnamen namelijk wel zo. Volgens mij komt dat doordat bij “West” ook met de synoniemen daarvan wordt gezocht, ook zonder " eromheen.

Mijn nieuwe link voor het zoeken op alleen “West” is nieuwe link

Bij het zoeken op “West 50” krijg ik als bovenste resultaat nu het adres “West 50, Avenhorn” terug en dat is het belangrijkste en daarna ook de percelen met perceelnummer 50.