neo4j是否适合搜索特定长度的路径

时间:2017-03-23 21:31:52

标签: neo4j graph-databases path-finding

我是图形数据库领域的全新成员。但是,让我们把它放在一边。

我的任务是从起点和后面找到一定长度(或任何其他尺寸)的特定路径。

因此,例如,我需要从一个节点找回一条路径,然后返回10"节点"很长,同时有大约15种重量的某种。这只是一个例子。

这对neo4j来说是否有可能,或者它是否正确使用?

希望我澄清一下,谢谢你的答案。

此致

2 个答案:

答案 0 :(得分:3)

Neo4j是循环检测的不错选择。 如果您需要找到长度为10的nn之间的一条路径,您可以尝试这样的查询:

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只返回一条路径。

生成的路径可以显示为图形: enter image description here

您还可以指定一个长度范围,例如[*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;