首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单击expand按钮时运行的Neo4j查询是什么?

问单击expand按钮时运行的Neo4j查询是什么?
EN

Stack Overflow用户
提问于 2018-06-26 06:25:46
回答 1查看 353关注 0票数 1

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

我的问题是,我想要获取目标节点旁边的所有节点/关系。但是,我尝试了以下cypher查询

代码语言:javascript
复制
MATCH (x:LABEL {Name: "name"})-[r]-(y)
RETURN x, r, y

和基于apoc的查询

代码语言:javascript
复制
MATCH (x:LABEL) WHERE x.Name = "name"
CALL apoc.path.subgraphAll(x, {maxLevel:1}) YIELD nodes, relationships
RETURN nodes, relationships;

所有这些都不会像按节点上的展开按钮那样快。实际上,它在一个数量级上更慢。

Neo4j版本: 3.3.1

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-06-26 07:06:47

返回节点(和/或relationshisp)的查询结果包括(尤其是)节点的本机ID。

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

代码语言:javascript
复制
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传递的):

代码语言:javascript
复制
MATCH path = (x)-[r]-(y)
WHERE ID(x) = $id
RETURN x, r, y
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51032569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档