当按下neo4j浏览器节点上的展开按钮时,neo4j执行的查询是什么?neo4j browser expand button
我的问题是,我想要获取目标节点旁边的所有节点/关系。但是,我尝试了以下cypher查询
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
谢谢!
发布于 2018-06-26 07:06:47
返回节点(和/或relationshisp)的查询结果包括(尤其是)节点的本机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, yhttps://stackoverflow.com/questions/51032569
复制相似问题