单击展开按钮时,Neo4j查询运行的是什么?

时间:2018-06-25 22:25:46

标签: neo4j cypher

按neo4j浏览器节点上的扩展按钮时neo4j执行的查询是什么? neo4j browser expand button

我的问题是我想获得目标节点旁边的所有节点/关系。但是我尝试了以下密码查询

MATCH (x:LABEL {Name: "name"})-[r]-(y)
RETURN x, r, y

和基于apoc的查询

MATCH (x:LABEL) WHERE x.Name = "name"
CALL apoc.path.subgraphAll(x, {maxLevel:1}) YIELD nodes, relationships
RETURN nodes, relationships;

所有这些都无法像按节点上的展开按钮一样快。实际上,它的速度要慢一些。

Neo4j版本:3.3.1

谢谢!

1 个答案:

答案 0 :(得分:1)

返回节点(和/或关联关系)的查询结果包括(除其他事项外)节点的本机ID。

当neo4j浏览器扩展节点时,该节点的本机id用于从该模板生成查询字符串(从the browser中的getNeighbours函数复制):

const query = `MATCH path = (a)--(o)
               WHERE id(a) = ${id}
               AND NOT (id(o) IN[${currentNeighbourIds.join(',')}])
               RETURN path, size((a)--()) as c
               ORDER BY id(o)
               LIMIT ${this.props.maxNeighbours -
                 currentNeighbourIds.length}`

如您所见,此查询正在做很多工作,但是本机ID搜索(在WHERE子句中)快速获取了a节点,并且一旦获取了它的相邻节点(o)也可以很快得到。

如果您在:LABEL(Name)上有an index,则您的查询应该能够更快地得到结果。

而且,如果您直接使用本机ID(就像浏览器一样),您应该会得到更快的结果(我假设id是作为parameter传递的):

MATCH path = (x)-[r]-(y)
WHERE ID(x) = $id
RETURN x, r, y