Gremlin查询匹配多个无重叠图模式时报错该如何解决
报错原因
Gremlin 的 match() 步骤要求所有传入的匹配模式之间必须存在可关联的公共标记变量,你给出的两组匹配规则(B到D的路径、G到J的路径)是完全独立的,没有共享的as()标记变量,查询优化器无法推导两个独立模式之间的关联逻辑,因此直接抛出The provided match pattern is unsolvable错误。match() 本身是为关联模式匹配场景设计的(例如「B的后续节点同时是G的前驱节点」这类存在变量关联的需求),完全独立的多规则校验不符合它的设计预期。
解决方案
你不需要拆分多次查询,也可以在单次遍历中完成校验,改用and()步骤包裹多个独立的子遍历即可:
boolean matches = g.V().and( // 第一个校验规则 __.has("name", "B").repeat(out()).until(has("name", "D")), // 第二个校验规则 __.has("name", "G").repeat(out()).until(has("name", "J")) ).hasNext();
其中__是Gremlin的匿名遍历类,导入对应包即可使用。
当然你也可以选择拆分两次独立查询分别判断结果再取逻辑与,两种方式的性能差异不大,拆分的写法可读性会更高。
内容的提问来源于stack exchange,提问作者kaqqao
相关产品推荐
相关产品推荐

