StatistikStadtZuerich / stat.stadt-zuerich.ch

API Backend for the linked open statistical data of the Municipality of Zurich
Other
0 stars 0 forks source link

Scoring in der Tags-API #32

Closed mchlrch closed 6 years ago

mchlrch commented 6 years ago

Die Sortierung der Tags gemäss Hierarchie vom Themenbaum muss noch verbessert werden. Aktuell stimmt die Sortierung noch nicht immer, insbesondere bei grosser Anzahl Resultate (Tags) stimmt sie nicht. Um die Sortierung sauber zu lösen, müssen wir die einzelnen Elemente des Suchresultats mit Scoring-Wert anreichern, die es dann dem Frontend erlauben die Resultate nachzusortieren.

Gehört zu #104 Suche ausbauen

mchlrch commented 6 years ago

Suchresultate erhalten als zusätzliches Attribut einen score. In der Kuration kann mit scoreBoost der Scoring-Wert beeinflusst werden.

Wird eine Liste von Elementen anhand ihrer Scoring-Werte absteigend sortiert, dann steht das wichtigste Element an erster Stelle.

textMatch - Beispiel von Lucene Scoring in Stardog

mchlrch commented 6 years ago

Ich habe mir hier ein Beispiel ausgedacht. Abzuklären ist natürlich noch, ob man das überhaupt tun können möchte. Update: Gemäss der Besprechung am Weekly vom 16.5. Kann das Boosting von Themen zurückgestellt werden. Ggf. nochmals betrachten, sobald die Kuration der Startseite umgesetzt ist (beinhaltet die Auswahl der Datasets und das Festlegen der Reihenfolge der Themen).

Beispiel zum scoreBoost: Das Tag der Referenztabelle "Wohnungen nach Zimmerzahl und Stadtquartier (BAU002)" soll in der Vorschlagssuche hervorgehoben werden.

Themenbaum Stufe score (Standard)
Thema 10^6
Stufe 1 10^5
Stufe 2 10^4
Stufe 3 10^3
Referenztabelle 10^2
Datensatz 10^1

scoreBoost Varianten für BAU002:

scoreBoost score (Final Ergebnis
2.0 2.0 x 10^2 BAU002 steht vor allen anderen Referenztabellen
2'000 2.0 x 10^5 BAU002 folgt nach den Top-Level Themen des Themenbaums
20'000 2.0 x 10^6 BAU002 steht an erster Stelle, vor allen anderen Themen
mchlrch commented 6 years ago

Wird eine Liste von Elementen anhand ihrer Scoring-Werte absteigend sortiert, dann steht das wichtigste Element an erster Stelle.

@surfiend Beispielhafter Ausschnitt aus der Response der Tags-API: http://stat.integ.stadt-zuerich.ch/tags/

{
    "@id": "http://stat.integ.stadt-zuerich.ch/statistics/code/haushalte",
    "@type": "Topic",
    "score": {
        "@type": "http://www.w3.org/2001/XMLSchema#float",
        "@value": "10000.0"
    },
    "label": "Haushalte"
},
{
    "@id": "http://stat.integ.stadt-zuerich.ch/topic/BEV051",
    "@type": "Topic",
    "score": {
        "@type": "http://www.w3.org/2001/XMLSchema#float",
        "@value": "100.0"
    },
    "label": "Umzugsbilanz"
},
{
    "@id": "http://ld.stadt-zuerich.ch/statistics/dataset/BEW-RAUM-ZEIT-SEX",
    "@type": "Topic",
    "score": {
        "@type": "http://www.w3.org/2001/XMLSchema#float",
        "@value": "10.0"
    },
    "label": "Bevölkerung nach Geschlecht"
}
surfiend commented 6 years ago

@mchlrch Weshalb stürzt die App beim Selektieren eines Tags (z.B. Bevölkerung) ab? http://stat.integ.stadt-zuerich.ch/statistics/code/bevoelkerung gibt undefined und http://stat.integ.stadt-zuerich.ch/tags/ gibt 404 This page could not be found. zurück.

mchlrch commented 6 years ago

@surfiend Es handelt sich um zwei Probleme mit unterschiedlichen Ursachen:

undefined: In der Integrationsumgebung folgt auf das Selektieren eines Thema-Tags ein Fehler im Frontend. In der Integrationsumgebung erfolgt im Backend ein Rewrite der URIs, die in der Response drin sind. Die URIs der Tags werden beim darauffolgenden Aufruf vom Frontend ans Backend als Parameter genutzt, werden aber in den Daten nicht gefunden und sind deshalb in der Response nicht enthalten. Da jedoch das Frontend in der Response immer mindestens die Parameter selbst als Resultat erwartet, folgt dann der Absturz. Dies ist nur in der Integrationsumgebung so. Ein einfacher Fix/Workaround im Backend ist aktuell leider nicht bekannt.

Vielleicht könnte man anstatt abzustürzen im Frontend für die erwarteten Elemente welche in der Response der Tags-API fehlen als Ersatz {type='TopicEntity', score=1.0, label='UNDEFINED'} verwenden? Man kann dann zwar immer noch nicht sinnvoll Suchen, aber immerhin gäbe es nicht gleich einen Absturz.

404: 404 bekommst du aufgrund des Routings. Um Ressourcen im Browser zu dereferenzieren, kannst du entsprechend folgende URLs verwenden, jeweils mit ?format=: