如何查询结果节点的相互关系?
发布于 7 年前 作者 tcldabc 5391 次浏览 来自 问答

Neo4J browser 查询一个节点后可以自动的把相互的关系也查出来。 我想实现同样的功能,写了相关查询,但效率很低,但是browser的效率很高。 请问如何优化?

MATCH (a:Concept)-[b:Relation]->(c:Concept) WHERE b._type = 7 AND c._id = '070c5d5c511f4297bedd83fe192a6c0a’ RETURN a

image.png

我只能这么写 MATCH (a:Concept)-[b:Relation]->(c:Concept) WHERE b._type = 7 AND c._id = '070c5d5c511f4297bedd83fe192a6c0a’ WITH collect(a._id) as coll MATCH (b:Concept)-[rel:Relation]->(c:Concept) WHERE b._id IN coll AND rel._type = 3 AND c._id IN coll RETURN startNode(rel) AS start, endNode(rel) AS end

用结果的_id:string做集合再去查相互的关系,也可以直接用节点做集合,但是会更慢 相关属性都有索引,_id唯一索引

大概直接查节点只要2ms不到,通过_id集合查要2600ms!,直接通过节点集合要5600ms! 2618816个节点,4880918边,高性能服务器

补充 可以这么优化,但还是慢(2600ms) MATCH (a:Concept)-[b:Relation]->(c:Concept) WHERE b._type = 7 AND c._id = '070c5d5c511f4297bedd83fe192a6c0a’ WITH a AS d MATCH (a)-[rel:Relation]->(d) WHERE rel._type = 3 RETURN startNode(rel) AS start, endNode(rel) AS end

回到顶部