因此我已经将数据集加载到Neo4j,其中包含10 MM节点。我正在寻找解决从两个节点开始的问题,寻找排除关系类型子集的最短路径。以下是查询尝试的示例:
match (p1:PT)-[*]-(p2:PT{src:"8"}),
p=shortestPath((p1)-[*..20]-(p2))
with p where p1.src is not null
and NONE (n in nodes(p) where labels(n) in [["X"],["Y"],["FX","RX"],["RX","FX"]])
return p limit 5000
查询需要永远(有效)。据我了解,查询将采用所有对p1,p2,它们之间存在某种关系,确定每对之间的最短路径,删除最后一个句子失败的最短路径,如果它们存在则返回最多5000个这样的路径。 / p>
所以我想知道1)任何人都会看到一种明显更有效的方法 2)如果我想从满足最后一个子句的那条中选择最短路径,那么如何修改查询?非常感谢您的帮助。
答案 0 :(得分:0)
尝试:
MATCH (p2:PT {src:"8"})
MATCH p=shortestPath((p1:PT)-[*..20]-(p2))
WHERE p1.src IS NOT NULL
AND none(n in nodes(p) where labels(n) in [["X"],["Y"],["FX","RX"],["RX","FX"]])
RETURN p LIMIT 5000;
这应该会好一些。 (p1:PT)-[*]-(p2:PT {src: "8"})
将匹配连接到p2
的所有路径,任意长度。此外,删除WITH
语句将允许将谓词置于shortestPath
条件中。
是否还有一些其他标准可以更精确地指定p1
,除了它有标签PT
且它的src
属性不为空?