首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >超连通节点间的neo4j直接关系

超连通节点间的neo4j直接关系
EN

Stack Overflow用户
提问于 2017-10-26 14:33:03
回答 1查看 251关注 0票数 1

我有两个节点。第一种是"b1“,有1600万种关系,第二种是"b”- 17k。标签B是在id属性上索引的。

如果它们有直接关系,我要检索的查询是:

代码语言:javascript
复制
profile 
MATCH (b:B {id :'D006019' }) WITH b 
MATCH (b1:B {id :'D006801' }) WITH b, b1 
MATCH (b)-[r]-(b1) RETURN r

几点意见:

  • 查询非常慢。它要跑5分钟。首先,它进行一个非常快速的节点索引扫描,但不知怎么它设法捕获节点b1,并通过扩展该节点继续执行。Byt "b1“有16m的关系,这与下面的过滤器破坏了性能
  • 只要稍微修改一下,我就可以使这个查询足够快。

下面是一个更快的查询:

代码语言:javascript
复制
profile 
MATCH (bB {id :'D006019' }) WITH b 
MATCH (b1:B) WHERE b1.id IN ['D006801' ] WITH b, b1   
MATCH (b)-[r]-(b1)  RETURN r 

因此,现在"b1“在" in”子句中,neo4j开始在"b“上扩展,后者只有17k关系,查询执行时间约为100 ms。

我的问题是:能否以neo4j在连接较少的节点上自动扩展的方式编写查询。

EN

回答 1

Stack Overflow用户

发布于 2017-10-26 18:18:58

有时你必须给塞弗一些提示:

代码语言:javascript
复制
MATCH (b:B {id :'D006019'})
USING INDEX b:B(id)
MATCH (b1:B {id :'D006801'})
USING INDEX b1:B(id)
MATCH (b)-[r]-(b1)
RETURN r;

上面的查询告诉Cypher,它应该对前两个匹配中的每一个使用:B(id)索引。在没有提示的情况下,规划者目前倾向于只使用索引一次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46957103

复制
相关文章

相似问题

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