用Gremlin-Python连接现有的JanusGraph

6

我使用Gremlin控制台创建了一个图形

gremlin> ConfiguredGraphFactory.graphNames
==>MYGRAPH
gremlin> ConfiguredGraphFactory.getConfiguration('MYGRAPH')
==>storage.backend=cql
==>graph.graphname=MYGRAPH
==>storage.hostname=127.0.0.1
==>Template_Configuration=false
gremlin> g.V().properties()
==>vp[name->SFO]
==>vp[country->USA]
==>vp[name->ALD]
==>vp[country->IND]
==>vp[name->BLR]
==>vp[country->IND]
gremlin>

我希望使用gremlin-python连接到MYGRAPH。请问有人可以告诉我如何使用gremlin-python访问名为“MYGRAPH”的图形吗?
提前致谢...
1个回答

12

首先,您需要安装一些jar文件以便JanusGraph处理gremlin-python脚本:

./bin/gremlin-server.sh -i org.apache.tinkerpop gremlin-python 3.2.9
请注意您安装的gremlin-python版本必须与JanusGraph兼容的Tinkerpop版本匹配。您可以在JanusGraph发布页面上找到兼容性信息,链接为https://github.com/JanusGraph/janusgraph/releases。例如,JanusGraph 0.2.2与Tinkerpop 3.2.9兼容。
接下来,您需要使用ConfiguredGraphFactory启动一个JanusGraph服务器。您只需使用分发包中的文件conf/gremlin-server/gremlin-server-configuration.yaml即可。
bin/gremlin-server.sh conf/gremlin-server/gremlin-server-configuration.yaml

这个文件与传统的conf/gremlin-server/gremlin-server.yaml文件在几行内容上有所不同

graphManager: org.janusgraph.graphdb.management.JanusGraphManager
graphs: {
  ConfigurationManagementGraph: conf/janusgraph-cql-configurationgraph.properties
}

初始化服务器时,我们需要加载图形MYGRAPH。请创建一个初始化脚本scripts/init.groovy。在这里,您可以加载尽可能多的不同图形。

def globals = [:]
myGraph = ConfiguredGraphFactory.open("MYGRAPH")
globals << [myGraphTraversal : myGraph.traversal()]

确保在 conf/gremlin-server/gremlin-server-configuration.yaml 中启动Gremlin服务器时执行此脚本

scriptEngines: {
  gremlin-groovy: {
    imports: [java.lang.Math],
    staticImports: [java.lang.Math.PI],
    scripts: [scripts/init.groovy]}}
最后,在您的Python项目中安装与JanusGraph版本相匹配的gremlin-python软件包。 对于JanusGraph 0.2.2,这是版本3.2.9。
pip install gremlin-python==3.2.9

打开Python shell并开始编写代码:

>>> 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()
>>> myGraphTraversal = graph.traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','myGraphTraversal'))
>>> myGraphTraversal.V().count()

1
非常好的答案,而且非常详细。我只想提一下,如果要使用Python lambda函数,那么只需要在服务器上安装gremlin-python即可。否则,服务器已经包含了Gremlin-Python所需的一切。它只需要能够反序列化GraphSON即可。 - Florian Hockmann
感谢Benoit提供详细的步骤。但我仍然不清楚在Python代码中应该在哪里指定图形名称?例如,在您的Python代码片段的最后一部分,您在哪里指定图形名称,即“MYGRAPH”?我的Python应用程序只想连接到“MYGRAPH”图形,而图形数据库可能有多个命名图形。 - Servesh Singh
1
我更新了我的答案,以便从Python访问“MYGRAPH”。诀窍是在Gremlin服务器启动时加载图形(请参见init.groovy),并将变量绑定到graphTraversalSource。这样,您可以将多个变量绑定到多个图形遍历中,并根据您的Python逻辑选择要遍历的变量。 - Benoit Guigal
@BenoitGuigal,这正是我一直在寻找的。非常感谢你。现在我已经解除了阻塞,一切都正常工作。你让我的一天变得美好...谢谢。 - Servesh Singh
@BenoitGuigal 首先,感谢您的回答 - 最终我已经成功地使用了您的解决方案,但是进行了一些更改。我不得不在 gremlin-server.yaml 中进行更改,而不是在 gremlin-server-configuration.yaml 中进行更改(为什么会有两个?它们看起来完全相同...),并且在我的 .yaml 文件中,只有 scriptEngines.gremlin-groovy 下的 plugins 部分,因此我使用了 scriptEngines.gremlin-groovy.plugins:{org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin: {files: ['scripts/init.groovy']}} 代替了 scriptEngines.gremlin-groovy.scripts: [scripts/init.groovy] - Glennie Helles Sindholt
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接