neo4j是否适合搜索特定长度的路径
Is neo4j suitable for searching for paths of specific length
我是图形数据库领域的新手。但是让我们把它放在一边。
我的任务是找到一条从起点到起点的一定长度(或任何其他度量)的环形路径。
因此,例如,我需要找到一条从一个节点来回的路径,长度为 10 "nodes",同时具有大约 15 个某种权重。这只是一个例子。
neo4j 是否有可能做到这一点,或者它是否是正确的使用方式?
希望我已经解释清楚了,谢谢你的回答。
此致
Neo4j 是循环检测的不错选择。
如果您需要找到一条从 n
到 n
的长度为 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;
我是图形数据库领域的新手。但是让我们把它放在一边。
我的任务是找到一条从起点到起点的一定长度(或任何其他度量)的环形路径。
因此,例如,我需要找到一条从一个节点来回的路径,长度为 10 "nodes",同时具有大约 15 个某种权重。这只是一个例子。
neo4j 是否有可能做到这一点,或者它是否是正确的使用方式?
希望我已经解释清楚了,谢谢你的回答。
此致
Neo4j 是循环检测的不错选择。
如果您需要找到一条从 n
到 n
的长度为 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;