代码之家  ›  专栏  ›  技术社区  ›  Sheff

Neo4j更有效的Cypher查询,用于查找具有关系的连接节点

  •  0
  • Sheff  · 技术社区  · 7 年前

    PROFILE MATCH p = (:Question{id:'1234'})-[:Answer*0..3]->(t)-
    [:Answer]->(:Question{id:'5678'})
    WHERE t:Set OR t:Read
    OPTIONAL MATCH (x)-[v:Answer]->(y)
    WHERE x.id <> '1234' and x IN nodes(p) AND v IN rels(p)
    return x,v
    

    这个查询效率很低,因为 OPTIONAL MATCH (x)-[v:Answer]->(y) 需要完整的节点扫描。

    我知道 t x 将是类型 Set Read 这将大大减少扫描,但不认为有办法查询这个。

    有什么方法可以优化这个吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   stdob--    7 年前

    你可以简单地放松你已经拥有的道路:

    MATCH p = (:Question{id:'1234'})-[:Answer*0..3]->(t)-[:Answer]->(:Question{id:'5678'})
    WHERE t:Set OR t:Read
    WITH nodes(p) AS nds, 
         rels(p) AS rls
    UNWIND range(1, length(nds)-2) AS i
    RETURN nds[i] AS x, 
           rls[i] AS v