Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 当我想找到从一个节点到另一个节点的路径时,如何优化密码?_Neo4j_Cypher - Fatal编程技术网

Neo4j 当我想找到从一个节点到另一个节点的路径时,如何优化密码?

Neo4j 当我想找到从一个节点到另一个节点的路径时,如何优化密码?,neo4j,cypher,Neo4j,Cypher,我想优化cypher,因为它太慢了,无法得到结果 我的代码是: MATCH (e0{name:"dacomitinib"})-[r01]-(e1)-[r12]-(e2)-[r23]-(e3{name:"rucaparib camsylate"}) WHERE (e1:GeneEntity or e1:CompoundEntity or e1:DrugsEntity or e1:DiseaseEntity or e1:ProteinEntity) and (e2:GeneEntity or e2

我想优化cypher,因为它太慢了,无法得到结果

我的代码是:

MATCH (e0{name:"dacomitinib"})-[r01]-(e1)-[r12]-(e2)-[r23]-(e3{name:"rucaparib camsylate"})
WHERE (e1:GeneEntity or e1:CompoundEntity or e1:DrugsEntity or e1:DiseaseEntity or e1:ProteinEntity) 
and (e2:GeneEntity or e2:CompoundEntity or e2:DrugsEntity or e2:DiseaseEntity or e2:ProteinEntity) 
RETURN e0.name,r01.confidence,e1.name,r12.confidence,e2.name,r23.confidence,e3.name
我该怎么办

更新一:

我的代码的
配置文件是


密码版本:密码3.5,计划员:成本,运行时:解释。86876729在53454毫秒内的总数据库命中率。

有一些方法可以提高查询的性能。

1。在
name
属性上创建索引:

对其他标签也执行同样的操作

CREATE INDEX ON :GeneEntity(name)
2。在匹配时使用标签(这里为<代码> E0和 E3):< /强>考虑使用标签来减少节点扫描。如果不使用标签,Neo4j将比较所有节点

解决方案: 您的查询在内部生成一个
AllNodesScan
AllNodesScan
这是个坏主意

更好的解决方案可能是:

MATCH (e0{name:"dacomitinib"}), (e3{name:"rucaparib camsylate"})
WITH e0, e3 
MATCH (e0)-[r01]-(e1)-[r12]-(e2)-[r23]-(e3) 
WHERE  
    head(labels(e1)) IN ['GeneEntity','CompoundEntity','DrugsEntity','DiseaseEntity','ProteinEntity'] 
    AND 
    head(labels(e2)) IN ['GeneEntity','CompoundEntity','DrugsEntity','DiseaseEntity','ProteinEntity'] 
RETURN e0.name, r01.confidence, e1.name, r12.confidence, e2.name, r23.confidence, e3.name

您是否可以在开始时添加
PROFILE
,然后在
MATCH
之前运行您的查询并共享扩展的查询计划?您好,@Raj。我已经在问题中添加了结果。您的数据库中的所有节点的计数是多少?您好,@Raj。所有节点的计数是230000,所有关系的计数是13000000。您好,@拉杰,我试过了,但没用。我还能做什么?○| ̄|_您是否也为其他标签创建了索引?此外,您的查询中没有关系方向,您可以添加这些并更新上述查询吗?是的,数据库中的
name
上有10个索引,因为节点的类别数为10。我无法这样做,因为我想查找两个节点之间的所有关系。