Neo4j REST API是否可以在BFS和DFS中选择算法?

Neo4j REST API是否可以在BFS和DFS中选择算法?,neo4j,cypher,graph-databases,Neo4j,Cypher,Graph Databases,我有一个密码查询,目前是通过深度优先搜索(DFS,Neo4j默认算法)获取数据。 我曾尝试使用排序(长度(p3)),其中查询运行速度非常慢 是否可以使用宽度优先搜索(BFS),通过RESTAPI调用此查询?为什么要一次又一次地重新匹配?因此,您会生成大量重复的路径。 您还应该为:User(profileId)使用labels+和index或constraint,以便足够快地查找。 您可能需要指定关系类型和方向 create index on :User(profileId); MATCH (a

我有一个密码查询,目前是通过深度优先搜索(DFS,Neo4j默认算法)获取数据。

我曾尝试使用
排序(长度(p3))
,其中查询运行速度非常慢


是否可以使用宽度优先搜索(BFS),通过RESTAPI调用此查询?

为什么要一次又一次地重新匹配?因此,您会生成大量重复的路径。 您还应该为:User(profileId)使用labels+和index或constraint,以便足够快地查找。 您可能需要指定关系类型和方向

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

可选匹配就像一个外部连接

感谢Michael的回答和教导。:)

实际上,我对密码的理解有一些错误,我试图将密码查询编写为SQL

事实上,这是错误的

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

以下是我当前的查询:

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
匹配(a:Profile)-[r1]-(b)
其中a.profileId='twitter_20357508'
和r1.dateTimePostedMil>138853440000
和r1.dateTimePostedMil<1417392000000
可选匹配(b)-[r2]-(c)
其中r2.dateTimePostedMil>138853440000
r2.dateTimePostedMil<1417392000000
可选匹配(c)-[r3]-(d)
其中r3.dateTimePostedMil>138853440000
和r3.dateTimePostedMil<1417392000000
返回不同的a、r1、b、r2、c、r3、d限制100

嗨,迈克尔,非常感谢你的回答!这对我帮助很大,您的查询是否可以返回类似(a)-(b)-(c)-(null)的结果行?我们的场景非常奇怪:它需要检索具有不确定端点(节点)的所有路径……系统试图通过提供用户id来显示用户(节点)之间所有可能的社交网络。
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