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

Is neo4j suitable for searching for paths of specific length

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

我的任务是找到一条从起点到起点的一定长度(或任何其他度量)的环形路径。

因此,例如,我需要找到一条从一个节点来回的路径,长度为 10 "nodes",同时具有大约 15 个某种权重。这只是一个例子。

neo4j 是否有可能做到这一点,或者它是否是正确的使用方式?

希望我已经解释清楚了,谢谢你的回答。

此致

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

MATCH p=(n:TestLabel {uuid: 1})-[rels:TEST_REL_TYPE*10]-(n)
RETURN p LIMIT 1

这里的 match 子句要求 Cypher 使用特定的关系类型找到从 n 到它自己的所有路径,恰好 10 跳。这在 Neo4j 中称为 variable length relationships。我只使用 limit 1 到 return 一条路径。

生成的路径可以可视化为图形:

您还可以指定一个长度范围,例如[*8..10](从 8 到 10 跳)。

我不确定我是否理解你的意思:

has around 15 weights of some kind

如果需要,您可以检查可变长度路径中的关系属性,例如权重。文档中的具体示例 here.

也许你也会对shortestPath()allShortestPaths()函数感兴趣,为此你需要知道结束节点和起始节点,你可以找到它们之间的路径,甚至指定长度。

因为你没有提供数据模型,我就假设你的starting/ending节点都是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;