J'ai essayé d'utiliser Gremlin, qui est un GraphDB, en Python. Notez comment utiliser
Installer une bibliothèque pour gérer Gremlin en 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()
# Créer une connexion Gremlin
g = graph.traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'))
Passez les informations du serveur Gremlin dans le premier argument de DriverRemoteConnection "G" est passé dans le deuxième argument, mais on ne sait pas à quoi se réfère ce "g". Le journal suivant est généré lorsque le serveur démarre, et il semble être ce "g".
[INFO] ServerGremlinExecutor - A GraphTraversalSource is now bound to [g] with graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
Je pense que cela peut être changé avec un fichier de configuration, mais je n'ai pas été en mesure de le savoir jusqu'à présent à ce stade.
Enregistrez les données et essayez d'obtenir les données enregistrées
g.addV('tarouo').property('name', 'tarou').toSet()
g.addV('tarouo').property('name', 'kotarou').toSet()
name = g.V().has('name', 'tarou').valueMap().toList()
print(name)
résultat
[{'name': ['tarou']}]
Le résultat de l'acquisition est renvoyé sous forme de dict. Le nom enregistré est au format liste pour une raison quelconque L'acquisition de données n'est pas une correspondance partielle mais une correspondance exacte
Ajouter des propriétés aux données enregistrées
tarou = g.V().has('name', 'tarou').toList()[0]
g.V(tarou).property('from', 'Tokyo').toSet()
tarou = g.V(tarou).valueMap().toList()[0]
print(tarou)
résultat
{'name': ['tarou'], 'from': ['Tokyo']}
g.V(tarou).property('from', 'Tokyo').property('age', 20).toSet()
tarou = g.V(tarou).valueMap().toList()[0]
print(tarou)
résultat
{'name': ['tarou'], 'from': ['Tokyo'], 'age': [20]}
Plusieurs éléments peuvent être ajoutés en connectant .property ()
Il sera mis à jour si vous enregistrez une propriété qui a déjà été enregistrée avec une valeur différente.
g.V(tarou).property('from', 'Kanagawa').property('age', 30).toSet()
tarou = g.V(tarou).valueMap().toList()[0]
print(tarou)
Je sens que je peux le faire, mais je ne sais pas comment le faire ... Je le mettrai à jour quand je saurai comment le faire.
g.V().drop()
g.E().drop()
g.V().drop().iterate()
g.E().drop().iterate()
Sans itération, le premier sera supprimé. Si iterate est présent, tout sera supprimé.
Ajouter des bords au tarou et au kotarou
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)
résultat
e[267][259-follow->261]
J'ai pu obtenir que ID259 et ID261 sont connectés dans une relation de suivi.
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()
Vous pouvez ajouter un bord comme celui-ci
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)
résultat
{<T.id: 1>: 498, <T.label: 4>: 'kotarou', 'name': ['kotarou']}
{<T.id: 1>: 500, <T.label: 4>: 'magotarou', 'name': ['magotarou']}
J'ai pu obtenir des informations sur les kotarou et magotarou qui ont une relation avec le tarou.
Si True n'est pas défini, seules les données minimales seront disponibles.
{'name': ['kotarou']}
{'name': ['magotarou']}
g.V(tarou).bothE()
g.V(tarou).bothE().valueMap().toList()
g.V(tarou).bothE().valueMap(True).toList()
J'essaierai de l'obtenir de trois manières
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'}
J'ai pu l'obtenir. Je pensais que g.V () était une opération liée à la valeur, alors je me suis demandé si g.E () pouvait obtenir des données liées aux bords, mais je ne pouvais pas bien l'obtenir.
J'étais en train de rechercher comment utiliser Gremlin pendant un moment, pensant qu'il pouvait être utilisé pour l'analyse de réseau, mais j'ai eu l'impression que ce serait difficile sans comprendre le concept de GraphDB. Je mettrai à jour l'article si je trouve une utilisation intéressante autre que le contenu décrit.
Recommended Posts