Database Reference
In-Depth Information
cube
_
enlarge
----------------
(0, 0),(2, 2)
Dieses Prinzip gilt für beliebige Dimensionen. Mit unserem begrenzten Hy-
percube können wir den speziellen Cube-Operator
@>
nutzen, der
enthält
be-
deutet. Die folgende Query findet die Distanz aller Punkte, die in einem Fünf-
Einheiten-Cube vom
Star Wars
-Genre-Punkt entfernt ist
SELECT
title, cube
_
distance(genre,
'(0,7,0,0,0,0,0,0,0,7,0,0,0,0,10,0,0,0)'
) dist
FROM
movies
WHERE
cube
_
enlarge(
'(0,7,0,0,0,0,0,0,0,7,0,0,0,0,10,0,0,0)'
::cube, 5, 18) @> genre
ORDER BY
dist;
title | dist
------------------------------------------------+------------------
Star Wars
|
0
Star Wars: Episode V - The Empire Strikes Back |
2
Avatar
|
5
Explorers
| 5.74456264653803
Krull
| 6.48074069840786
E.T. The Extra-Terrestrial
| 7.61577310586391
Mittels eines Subselects können wir das Genre über den Filmnamen bestim-
men und unsere Berechnung über dieses Genre mit Hilfe eines Tabellen-
Alias durchführen.
SELECT
m.movie
_
id, m.title
FROM
movies m, (
SELECT
genre, title
FROM
movies
WHERE
title =
'Mad Max'
)s
WHERE
cube
_
enlarge(s.genre, 5, 18) @> m.genre
AND
s.title <> m.title
ORDER BY
cube
_
distance(m.genre, s.genre)
LIMIT
10;
movie
_
id | title
----------+----------------------------
1405 | Cyborg
1391 | Escape from L.A.
1192 | Mad Max Beyond Thunderdome
1189 | Universal Soldier
1222 | Soldier
1362 | Johnny Mnemonic
946 | Alive
418 | Escape from New York
1877 | The Last Starfighter
1445 | The Rocketeer
Diese Methode der Film-Empfehlung ist nicht perfekt, aber ein sehr guter
Anfang. Weitere dimensionale Queries werden wir in späteren Kapiteln noch
sehen, z. B. die zweidimensionale geographische Suche in MongoDB (siehe
5.4,
Genre als mehrdimensionale Hypercubes
, auf Seite 187).