Database Reference
In-Depth Information
Zuerst teilen wir der Gremlin-Engine mit, dass wir einen neuen Schritt na-
mens
varietal
einfügen. Die zweite Zeile weist Gremlin an, die
Vertex
-und
Pipe
-Klassen einzubinden. Die letzte Zeile sorgt für den magischen Moment.
Tatsächlich erzeugt sie die Closure, die den Code enthält, die dieser Schritt
ausführen soll. Der Unterstrich und die Klammern repräsentieren das ak-
tuelle Pipeline-Objekt. Von diesem Objekt aus gehen wir alle Nachbarknoten
durch, die über einen
grape
_
type
-Knoten miteinander verbunden sind, d. h.
die Rebsorten-Knoten. Wir schließen die Sache mit
dedup
ab, um mögliche
Duplikate zu entfernen.
Der Aufruf unseres neuen Schrittes erfolgt wie bei jedem anderen Schritt
auch. Zum Beispiel liefert die folgende Zeile den Namen der Rebsorte des
Eisweins zurück:
g.V.filter{it.name=='Prancing Wolf Ice Wine 2007'}.varietal.name
==> riesling
Probieren wir etwas anderes. Diesmal wollen wir einen Schritt entwickeln, der
eine häufig gestellte Frage beantwortet: Welchen Wein mögen die Freunde am
liebsten?
neo4j/friendsuggest.groovy
Gremlin.defineStep(
'friendsuggest'
,
[Vertex,
Pipe
],
{
_
().sideEffect{start = it}.both(
'friends'
).
except([start]).out(
'likes'
).dedup
}
)
Genau wie beim letzten Mal übergeben wir Gremlin den Namen des neu-
en Schritts (
friendsuggest
) und binden es an
Vertex
und
Pipe
. Diesmal fil-
tert unser Code die aktuelle Person heraus. Dazu legen wir die aktuelle Ver-
tex/Pipe mit Hilfe der Funktion
sideEffect{start = it}
in einer Variablen
(start) ab. Dann rufen wir alle
friends
-Knoten ab, wobei wir die aktuelle Per-
son ausschließen (Alice soll nicht in der Liste Ihrer eigenen Freunde stehen).
Nun brauen wir uns etwas mit Pipes zusammen! Wir können den neuen
Schritt aufrufen, wie jeden anderen auch.
g.V.filter{it.name=='Patty'}.friendsuggest.name
==> Prancing Wolf Ice Wine 2007
==> Prancing Wolf Kabinett 2002