首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Neo4j REST能在BFS和DFS中选择算法吗?

Neo4j REST能在BFS和DFS中选择算法吗?
EN

Stack Overflow用户
提问于 2014-07-30 07:04:10
回答 2查看 674关注 0票数 0

我有一个Cypher查询,当前由depth-first-search(DFS, Neo4j default algorithm)获取数据

代码语言:javascript
运行
复制
MATCH p1=(a)--(b)
WHERE a.profileId = '203'
OPTIONAL MATCH p2=(a)--(b)--(c) 
WHERE a.profileId = '203'
OPTIONAL MATCH p3=(a)--(b)--(c)--(d) 
WHERE a.profileId = '203'
RETURN DISTINCT a,b,c,d 
LIMIT 500

我尝试过使用SORT(Length(p3)),在这里查询运行得非常慢。

是否可以使用breadth-first-search(BFS)通过REST调用此查询?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-30 08:39:35

你为什么一次又一次地重新配对?所以你会产生很多重复的路径。您还应该为:User(profileId)使用标签+和索引或约束,这样查找a的速度就足够快了。您可能希望指定关系类型和方向。

代码语言:javascript
运行
复制
create index on :User(profileId);

MATCH (a:User)--(b)
WHERE a.profileId = '203'
OPTIONAL MATCH (b)--(c)--(d) 
RETURN distinct a,b,c,d limit 500

可选匹配就像外部连接一样。

票数 1
EN

Stack Overflow用户

发布于 2014-08-01 02:10:31

谢谢迈克尔的回答和教诲。:)

实际上,我对Cypher的理解有一些错误,我试图将Cypher查询写成SQL。

事实上,这是错误的。

如果我们在匹配中使用路径,如(a)--(b),则无需在子句(即可选匹配)中再次引用它。直接使用(b)--(c)就够了。(a)--(b)--(c)将返回重复的结果。

下面是我当前的查询:

代码语言:javascript
运行
复制
MATCH (a:Profile)-[r1]-(b)
WHERE a.profileId = 'twitter_20357508'
and r1.dateTimePostedMil >  1388534400000  
and r1.dateTimePostedMil <  1417392000000
OPTIONAL MATCH (b)-[r2]-(c)
WHERE r2.dateTimePostedMil >  1388534400000  
and r2.dateTimePostedMil <  1417392000000
OPTIONAL MATCH (c)-[r3]-(d)
WHERE r3.dateTimePostedMil >  1388534400000  
and r3.dateTimePostedMil <  1417392000000
RETURN distinct a,r1,b,r2,c,r3,d limit 100
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25030610

复制
相关文章

相似问题

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