Loading…
Tilbage

Profilbillede

Vejnavn fra opslag findes ikke i adressesøgning

Jonas Jensen

Hej

Vi har en integrationen til DAWA kører, som ellers virker fint. Men når der slås vejnavne op til postnummeret 8330, returneres f.eks. Nygårds Allé,

http://dawa.aws.dk/vejnavne?postnr=8330&q=N*

når der laves en adressesøgning på denne vej, findes der imidlertid ingen.

https://dawa.aws.dk/adresser?postnr=8330&vejnavn=Nyg%C3%A5rds%20All%C3%A9

Ved brug af søgning med q-parameteren ses det at der findes adresser på vejen, men da vejen er fundet ved opslag, burde der være eksakt match.

Dette virker som en fejl på hos Dawa, men håber I kan hjælpe, hvis vejnavnet skal formateres anderledes i adressesøgningen.

Anvendelsen kræver desuden eksakt match på vejnavnet, så at finde de relevante adresser ved hjælp af søgning på q-parameteren er desværre ikke en mulighed.

Håber I kan hjælpe

- Jonas

ændret af Jonas Jensen (24.04.2019)

Hej Jonas

Det er en fejl, at adresser på Nygårds Allé ikke kan fremsøges.

Det er en lidt mystisk fejl, da det ser ud til at problemet begrænser sig til Nygårds Allé og ikke andre vejnavne.

Vi er ved at undersøge hvorfor og vil vende tilbage, når vi ved noget mere.

Tak for fejlmeldingen.

Mvh.
Finn

ændret af Finn Jordal (25.04.2019)

Vi har fundet årsagen til fejlen. Vi når ikke at rette den i forbindelse med release i næste uge, men håber vi kan have en rettelse på plads ugen efter.

Årsagen til fejlen er lang og meget teknisk, men for de interesserede kommer forklaringen her.

DAWA anvender Open Source databasen PostgreSQL, og den kører oven på en Ubuntu.

PostgreSQL har locale support og understøtter forskellige sprog. Når en database initialiseres angives hvilken locale databasen skal benytte. Vi anvender locale da_DK til DAWA, da vi udelukkende håndterer danske tekster (vejnavne, m.v.).

Locale har bl.a. betydning for hvordan tekststrenge sorteres. Med dansk locale, så kommer å f.eks. til sidst i alfabetet, og dobbelt-a sorteres som å.

PostgreSQL benytter som udgangspunkt standard C biblioteket til at implementere locales, herunder til sortering af strenge.

Når en vej skal fremsøges ud fra vejnavn, så anvendes et indeks på vejnavnet. Indekset er et B-træ, og dets funktionalitet kræver derfor sammenligning af strenge, både ved opbygning af indekset og ved søgning i indekset. Her kommer localet altså i spil - i indekset anvendes således også locale da_DK, og det er standard C biblioteket, som står for sammenligningen.

Desværre er det sådan, at standard C biblioteket på Ubuntu har ændret sorteringen af nogle strenge i da_DK localet fra version 16 til version 18 af Ubuntu. På Ubuntu version 16, så kommer strengen "Nygaards Alle" FØR strengen "Nygårds Allé". Men på Ubuntu version 18, så kommer strengen "Nygaards Alle" EFTER strengen "Nygårds Allé".

Problemet er, at indekset er bygget under ubuntu version 16, dvs. i indekset kommer "Nygaards Alle" før "Nygårds Allé". Men læsningen af indekset foregår under ubuntu version 18, hvor det giver det modsatte resultat når de to strenge sammenlignes. Derfor finder databasen ikke rækken med Nygårds Allé, og returnerer et tomt svar.

Søgningen via q-parameteren er ikke påvirket, da denne anvender en anden type indeksering.

En forklaring af problemet på engelsk kan læses her:

https://www.postgresql.org/message-id/flat/BA6132ED-1F6B-4A0B-AC22-81278F5AB81E%40tripadvisor.com

Vi vil naturligvis sørge for at ændre vores opgraderingsprocedurer, så problemet ikke opstår igen i fremtiden.

Fejlen er nu løst.

Tak for hurtig løsning såvel som forklaring