如何在Janus Graph中为边创建多属性?Gremlin-Python报错求助
问题:Gremlin-Python创建多属性边报错
使用Gremlin-Python时,能正常创建带单个属性的边,但尝试创建包含多个属性的边时触发以下错误:
Received error message '{'requestId': '006e30ec-ff77-419b-9378-3b5d241f25f7', 'status': {'message': 'No signature of method: org.janusgraph.graphdb.relations.SimpleJanusGraphProperty.property() is applicable for argument types: (String, Integer) values: [timestamp, 1726492791] Possible solutions: propertyKey(), hasProperty(java.lang.String)', 'code': 597, 'attributes': {'stackTrace': 'groovy.lang.MissingMethodException: No signature of method: org.janusgraph.graphdb.relations.SimpleJanusGraphProperty.property() is applicable for argument types: (String, Integer) values: [timestamp, 1726492791] Possible solutions: propertyKey(), hasProperty(java.lang.String) at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:72) at org.codehaus.groovy.vmplugin.v8.IndyGuardsFiltersAndSignatures.unwrap(IndyGuardsFiltersAndSignatures.java:161) at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) at Script154.run(Script154.groovy:1) at org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:679) at org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:381) at java.scripting/javax.script.AbstractScriptEngine.eval(Unknown Source) at org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor.lambda$eval$0(GremlinExecutor.java:272) at java.base/java.util.concurrent.FutureTask.run(Unknown Source) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.base/java.util.concurrent.FutureTask.run(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.base/java.lang.Thread.run(Unknown Source) ', 'exceptions': ['groovy.lang.MissingMethodException']}}, 'result': {'data': None, 'meta': {}}}'
当前使用的创建边查询语句:
default_db_traversal.V().has('XYZ', 'node_id', 'FLVVHKw5AamuHNmAjdYcdt').next().addEdge('causes', default_db_traversal.V().has('XYZ', 'node_id','ASIUDEYnsajdhqwdCsa').next()).property('rel_name', '').property('timestamp', 1726492791).property('value', 'ABC').property('condition', 'aosda').next();
需求是创建带多个属性的边,建立一对多关系,并能基于边属性进行查询。
解决方案
错误原因是提前调用.next()破坏了遍历链:你先通过.next()拿到了顶点对象,调用addEdge()返回的是边对象,而边对象的.property()方法返回的是属性对象,不是边对象,后续再链式调用.property()就会报错(属性对象没有property()方法)。
正确的写法是使用Gremlin标准遍历链,不要提前终止遍历:
default_db_traversal.V().has('XYZ', 'node_id', 'FLVVHKw5AamuHNmAjdYcdt') \ .addE('causes') \ .to(default_db_traversal.V().has('XYZ', 'node_id','ASIUDEYnsajdhqwdCsa')) \ .property('rel_name', '') \ .property('timestamp', 1726492791) \ .property('value', 'ABC') \ .property('condition', 'aosda') \ .next()
说明:
- 使用
addE()替代顶点的addEdge()方法,保持整个操作为Gremlin遍历的一部分 - 每个
.property()调用都会返回遍历对象,支持链式操作 - 最后用
.next()执行遍历并返回创建的边 - 确保所有边属性的键已在JanusGraph中定义(若开启自动创建属性键则无需手动定义,需确认JanusGraph配置)
内容的提问来源于stack exchange,提问作者Rahul _
相关产品推荐
相关产品推荐

