【问题标题】:Get paths by ordering and limiting the number of intermediate nodes in Cypher Neo4J通过排序和限制 Cypher Neo4J 中的中间节点数量来获取路径
【发布时间】:2020-02-27 12:39:04
【问题描述】:

我有一个包含数百万关系的大型密集图。我想从特定节点开始获取长度为 3 的所有可能路径。但是,这会导致数千条可能的路径,并且需要大量时间。所以我想根据节点的权重过滤我要扩展的中间节点。

请求的开头是:

MATCH p=(e1:LabeledExperience { name: 'software developer'})-[n:NextExp *1..3]->(e2:LabeledExperience) 

然后 UNWIND 节点 n 并应用条件。问题在于它首先匹配所有可能的路径,展开它们,然后应用条件。有没有办法在每一步都做到这一点?

【问题讨论】:

  • 您在检查什么样的条件?逻辑有多复杂?

标签: neo4j cypher


【解决方案1】:

一次只采取一步(关系),每一步使用WHERE 子句来过滤掉不需要的节点。

类似这样的:

MATCH (e1:LabeledExperience {name: 'software developer'})-[:NextExp]->(e2:LabeledExperience)
WHERE e2.weight > 10
OPTIONAL MATCH (e2)-[:NextExp]->(e3:LabeledExperience)
WHERE e3.weight > 10
OPTIONAL MATCH (e3)-[:NextExp]->(e4:LabeledExperience)
WHERE e4.weight > 10
RETURN e1, e2, e3, e4

第一次使用OPTIONAL MATCH 之后的步骤即使e2e3 是叶节点也让查询返回结果。因此,返回的e3 和/或e4 值可以是null

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多