You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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 _

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 07:59:53