Database Reference
In-Depth Information
Ödipus
Vom Winde
verweht
Jungfrau (40),
männlich, sucht...
Ich glaub, mich
tritt ein Pferd
Komödie
Wir können das auf weitere Dimensionen mit mehr Genres (2, 3 oder 18) aus-
weiten. Das Prinzip ist das gleiche: Eine Nearest-Neighbor-Suche des nächs-
ten Punktes im Genre-Raum liefert die nächsten Genre-Treffer zurück.
Die nächsten Treffer des Genre-Vektors können Sie mit cube _ distance
(point1, point2) ermitteln. Nachfolgend bestimmen wir die Distanz aller
Filme zum Star Wars -Genre-Vektor und sortieren das Ergebnis nach dieser
Distanz.
SELECT * ,
cube _ distance(genre, '(0,7,0,0,0,0,0,0,0,7,0,0,0,0,10,0,0,0)' ) dist
FROM movies
ORDER BY dist;
Wir haben den movies _ genres _ cube -Index aufgebaut, als wir die Tabellen an-
gelegt haben. Doch selbst mit einem Index ist die Abfrage relativ langsam, da
sie eine vollständige Verarbeitung der Tabelle verlangt. Sie berechnet die Di-
stanz für jede Zeile und sortiert sie dann.
Statt die Distanz für jeden Punkt zu berechnen, können wir uns mit Hil-
fe eines sog. Bounding Cube auf wahrscheinliche Kandidaten beschränken.
Die fünf nächsten Städte für einen Punkt zu ermitteln, geht mit einer loka-
len Landkarte wesentlich schneller als mit einer Weltkarte. Die Begrenzung
(bounding) reduziert die Punkte, die wir uns ansehen müssen.
Wir verwenden cube _ enlarge(cube,radius,dimensions) , um einen 18-dimen-
sionalen Kubus aufzubauen, der etwas breiter (radius) als ein Punkt ist.
Sehen wir uns ein einfaches Beispiel an. Wenn wir ein zweidimensionales
Quadrat um einen Punkt (1,1) aufbauen, liegt der untere linke Punkt des
Quadrats bei (0,0) und der obere rechte Punkt bei (2,2).
SELECT cube _ enlarge( '(1,1)' ,1,2);
Search WWH ::




Custom Search