我有一个密码查询,该查询返回一系列路径,这些路径部分重叠,并导致许多不同的簇。在这种情况下,将存在较小规模(1-50个节点)的适量群集(100-1000个)。完整的数据集通常是几百万个节点(查询提取了总节点的相对较小的子集)。
查询的简化版本如下:
MATCH p=(a:M)-[:F2EDGE]-(b:M) WHERE a.prop > 90 AND b.prop > 90 RETURN p
实际的查询要比中间节点数量可变的查询复杂一些,但这应该可以说明问题。
现在,我想探索该查询生成的不同集群。 我在Connected Components algorithm上找到了似乎正确的文档,但是我看不到如何将其应用于查询结果的路径列表。 我希望能够:
有人可以建议如何实现这一目标吗?
答案 0 :(得分:2)
您可以与此同时使用cypher projections
遵循这些原则:
CALL algo.unionFind('
MATCH (a:M) WHERE a.prop > 90 RETURN id(a) as id
UNION
MATCH (b:M) AND b.prop > 90 RETURN id(b) as id
', '
MATCH p=(a:M)-[:F2EDGE]->(b:M) WHERE a.prop > 90 AND b.prop > 90 RETURN id(a) as source, id(b) as target
', {graph:"cypher",write:true, partitionProperty:"partition"})
请注意,在这种情况下,一个节点查询就足够了,因为它们都具有相同的条件,我只想演示如何组合源节点和目标节点上的查询。
如果您想将节点限制为仅连接图中的节点,则也可以将其用作“节点查询”:
MATCH (a:M)-[:F2EDGE]-(b:M)
WHERE a.prop > 90 AND b.prop > 90
UNWIND [id(a), id(b)] as id
RETURN distinct id