从某个节点按照给定深度d遍历查询,要求每个节点的边数不超过100,使用neo4j CQL该怎么实现呢?
发布于 4 年前 作者 kangda 2265 次浏览 来自 问答

求助啊,大佬们

3 回复

match p=(n)-[*3]-() where size((n)–())=3 return p limit 1 如果你的需求是路径中包含的所有节点边数不超过100,纯cypher应该无法实现,需要借助apoc的函数实现。apoc实现不了的话,考虑一下自己实现遍历过程。可以参考这个 neo4j自定义函数和过程。 下面这个apoc的过程我没有试过能不能做你说那种遍历,但是应该对于你的需求会有帮助。

/** * 可配置的路径扩展:apoc.path.expandConfig * 参数名 类型 缺省值 可为空? 说明 * startNode LONG - 节点id,或者节点列表 无 否 遍历的起始节点 * {configuration} 配置选项列表 NULL 是 具体配置项参见下面的说明 * minDepth INTEGER 0 是 最小遍历层次数 * maxDepth INTEGER -1 是 最大遍历层次数。-1表示不限制,直到不再有可遍历的路径为止 * relationshipFilter 字符串 NULL 是 关系过滤器规则 * abelFilter 字符串 NULL 是 标签过滤器规则 * bfs 布尔值 false 是 true–宽度优先遍历 false–深度优先遍历 * uniqueness 字符串 NULL 是 唯一性规则 * filterStartNode 布尔值 false 是 是否过对起始节点应用过滤规则 * limit 正整数 -1 是 返回路径的数目上限 * optional 布尔值 false 是 true–如果没有找到复合条件的路径,返回NULL值的序列;false–如果没有找到复合条件的路径,则不返回 * endNodes 节点列表 NULL 是 遍历终止节点列表 * terminatorNodes 节点列表 NULL 是 终止节点列表 * sequence 字符串 NULL 是 节点和标签过滤规则序列。指定sequence规则后labelFilter和relationshipFilter的内容会被忽略。 * beginSequenceAtStart 布尔值 true 是 是否对起始节点应用sequence中定义的规则 * * **/

谢谢,apoc的过滤条件是关系和节点的属性,并没有限制遍历的每层中每个节点的数量,这个看来要自己实现遍历过程了。

Cypher和已有的APOC过程都不能。参考Neo4j Traversal Framework来实现。

回到顶部