Ich habe versucht, Gremlin, eine GraphDB, in Python zu verwenden. Notieren Sie sich die Verwendung
Installieren Sie eine Bibliothek für Gremlin in Python
pip install gremlinpython
from gremlin_python import statics
from gremlin_python.structure.graph import Graph
from gremlin_python.process.graph_traversal import __
from gremlin_python.process.strategies import *
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
graph = Graph()
# Gremlin-Verbindung herstellen
g = graph.traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'))
Übergeben Sie die Gremlin-Serverinformationen im ersten Argument von DriverRemoteConnection "G" wird im zweiten Argument übergeben, aber es ist nicht bekannt, worauf sich dieses "g" bezieht. Das folgende Protokoll wird ausgegeben, wenn der Server gestartet wird, und es scheint dieses "g" zu sein.
[INFO] ServerGremlinExecutor - A GraphTraversalSource is now bound to [g] with graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
Ich habe das Gefühl, dass es mit einer Einstellungsdatei geändert werden kann, aber ich konnte es zu diesem Zeitpunkt noch nicht herausfinden.
Registrieren Sie die Daten und versuchen Sie, die registrierten Daten zu erhalten
g.addV('tarouo').property('name', 'tarou').toSet()
g.addV('tarouo').property('name', 'kotarou').toSet()
name = g.V().has('name', 'tarou').valueMap().toList()
print(name)
Ergebnis
[{'name': ['tarou']}]
Das Akquisitionsergebnis wird als Diktat zurückgegeben. Der registrierte Name ist aus irgendeinem Grund im Listenformat Die Datenerfassung ist keine teilweise Übereinstimmung, sondern eine exakte Übereinstimmung
Fügen Sie den registrierten Daten Eigenschaften hinzu
tarou = g.V().has('name', 'tarou').toList()[0]
g.V(tarou).property('from', 'Tokyo').toSet()
tarou = g.V(tarou).valueMap().toList()[0]
print(tarou)
Ergebnis
{'name': ['tarou'], 'from': ['Tokyo']}
g.V(tarou).property('from', 'Tokyo').property('age', 20).toSet()
tarou = g.V(tarou).valueMap().toList()[0]
print(tarou)
Ergebnis
{'name': ['tarou'], 'from': ['Tokyo'], 'age': [20]}
Durch Verbinden von .property () können mehrere Elemente hinzugefügt werden.
Es wird aktualisiert, wenn Sie eine Eigenschaft registrieren, die bereits mit einem anderen Wert registriert wurde.
g.V(tarou).property('from', 'Kanagawa').property('age', 30).toSet()
tarou = g.V(tarou).valueMap().toList()[0]
print(tarou)
Ich habe das Gefühl, ich kann es schaffen, aber ich weiß nicht, wie ich es machen soll ... Ich werde es aktualisieren, wenn ich weiß, wie es geht.
g.V().drop()
g.E().drop()
g.V().drop().iterate()
g.E().drop().iterate()
Ohne Iteration wird der erste gelöscht. Wenn Iteration vorhanden ist, werden alle gelöscht.
Fügen Sie Kanten zu Tarou und Kotarou hinzu
tarou = g.V().has('name', 'tarou').toList()[0]
kotarou = g.V().has('name', 'kotarou').toList()[0]
g.addE('follow').from_(tarou).to(kotarou).toSet()
edgeList = g.E().toList()
for edge in edgeList:
print(edge)
Ergebnis
e[267][259-follow->261]
Ich konnte feststellen, dass ID259 und ID261 in einer folgenden Beziehung verbunden sind.
tarou = g.V().has('name', 'tarou').toList()[0]
kotarou = g.V().has('name', 'kotarou').toList()[0]
magotarou = g.V().has('name', 'magotarou').toList()[0]
g.addE('son').from_(tarou).to(kotarou).toSet()
g.addE('son').from_(kotarou).to(magotarou).toSet()
g.addE('grandchild').from_(tarou).to(magotarou).toSet()
Sie können eine Kante wie diese hinzufügen
e[298][288-son->290]
e[299][290-son->292]
e[300][288-grandchild->292]
valueList = g.V(tarou).both().valueMap(True).toList()
for value in valueList:
print(value)
Ergebnis
{<T.id: 1>: 498, <T.label: 4>: 'kotarou', 'name': ['kotarou']}
{<T.id: 1>: 500, <T.label: 4>: 'magotarou', 'name': ['magotarou']}
Ich konnte Informationen über Kotarou und Magotarou erhalten, die eine Beziehung zu Tarou haben.
Wenn True nicht festgelegt ist, sind nur die Mindestdaten verfügbar.
{'name': ['kotarou']}
{'name': ['magotarou']}
g.V(tarou).bothE()
g.V(tarou).bothE().valueMap().toList()
g.V(tarou).bothE().valueMap(True).toList()
Ich werde versuchen, es auf drei Arten zu bekommen
edge list 1..
e[597][587-son->589]
e[599][587-grandchild->591]
edge list 2..
{}
{}
edge list 3..
{<T.id: 1>: 597, <T.label: 4>: 'son'}
{<T.id: 1>: 599, <T.label: 4>: 'grandchild'}
Ich konnte es bekommen. Ich dachte, dass g.V () eine wertbezogene Operation ist, also fragte ich mich, ob g.E () kantenbezogene Daten erhalten könnte, aber ich konnte sie nicht gut erhalten.
Ich habe eine Weile nachgeforscht, wie man Gremlin verwendet, und dachte, dass es für die Netzwerkanalyse verwendet werden könnte, aber ich hatte den Eindruck, dass es schwierig sein würde, ohne das Konzept von GraphDB zu verstehen. Ich werde den Artikel aktualisieren, wenn ich eine andere interessante Verwendung als den beschriebenen Inhalt finde.
Recommended Posts