我是图形数据库领域的全新成员。但是,让我们把它放在一边。
我的任务是从起点和后面找到一定长度(或任何其他尺寸)的特定路径。
因此,例如,我需要从一个节点找回一条路径,然后返回10"节点"很长,同时有大约15种重量的某种。这只是一个例子。
这对neo4j来说是否有可能,或者它是否正确使用?
希望我澄清一下,谢谢你的答案。
此致
答案 0 :(得分:3)
Neo4j是循环检测的不错选择。
如果您需要找到长度为10的n
到n
之间的一条路径,您可以尝试这样的查询:
MATCH p=(n:TestLabel {uuid: 1})-[rels:TEST_REL_TYPE*10]-(n)
RETURN p LIMIT 1
这里的匹配子句要求Cypher使用特定的关系类型找到从n到自身的所有路径,正好是10个跃点。这在Neo4j中称为variable length relationships。我使用limit 1
只返回一条路径。
您还可以指定一个长度范围,例如[*8..10]
(距离8到10跳)。
我不确定我明白你的意思:
有大约15种重量
如果需要,您可以在可变长度路径中检查关系属性,例如权重。文档here中的具体示例。
也许你也会对shortestPath()
和allShortestPaths()
函数感兴趣,你需要知道它们的结束节点和起始节点,你可以找到它们之间的路径,甚至指定它们长度。
答案 1 :(得分:3)
由于您没有提供数据模型,我将假设您的起始/结束节点都具有Foo
标签,相关关系都具有BAR
类型,并且您的通告路径关系都指向同一方向(一般来说,处理速度应该更快)。另外,我认为你只需要特定长度的圆形路径(10)。最后,我猜你更喜欢总重量较低的圆形路径,并且你想忽略总重量超过边界值的路径(15)。此查询完成上述操作,按升序返回匹配路径及其路径权重:
MATCH p=(f:Foo)-[rels:BAR*10]->(f)
WITH p, REDUCE(s = 0, r IN rels | s + r.weight) AS pathWeight
WHERE pathWeight <= 15
RETURN p, pathWeight
ORDER BY pathWeight;