很抱歉措辞含糊,这是问题所在。由于昨天得到了一些帮助,我有一个正在快速运行的查询(4秒):
// polypeptide domain, protein HMM match and polypeptide (fast)
MATCH (pd:PolypeptideDomain) WITH pd LIMIT 5
MATCH (phm:ProteinHmmMatch)
WHERE (phm)-[:PART_OF]->(pd)
MATCH (p:Polypeptide)
WHERE (phm)-[:PART_OF]->(p)
RETURN phm,pd,p这是因为我选择了5个多肽结构域,然后很快就找到了相关的蛋白HMM匹配和多肽。
所以,我只想添加与多肽相关的mRNA --这是一对一的关系,每个mRNA连接一个和唯一一个多肽,所以我认为额外的匹配会很快。以下是我写的:
// polypeptide domain, protein hmm match, polypeptide and mRNA (blows up)
MATCH (pd:PolypeptideDomain) WITH pd LIMIT 5
MATCH (phm:ProteinHmmMatch)
WHERE (phm)-[:PART_OF]->(pd)
MATCH (p:Polypeptide)
WHERE (phm)-[:PART_OF]->(p)
MATCH (m:mRNA)
WHERE (p)-[:TRANSLATION_OF]->(m)
RETURN phm,pd,p,m此查询永远不会返回。我又一次完全迷茫了。对于我的一生,我无法弄清楚如何使这个简单的添加到查询工作。
发布于 2015-10-28 01:41:36
我认为它正在失去控制,因为对于每一个MATCH结果,它都试图找到每一个其他MATCH结果的每个组合。
此外,在WHERE子句中通常不应该使用模式匹配,除非您正在进入更复杂的逻辑(如NOT(<match syntax))。这个怎么样?
MATCH (pd:PolypeptideDomain) WITH pd LIMIT 5
MATCH (phm:ProteinHmmMatch)-[:PART_OF]->(pd)
WITH pd, phm
MATCH (phm)-[:PART_OF]->(p:Polypeptide)
WITH pd, phm, p
MATCH (p)-[:TRANSLATION_OF]->(m:mRNA)
RETURN phm,pd,p,m如果其中任何一个涉及多个关系,则可以在WITH中执行WITH中的WITH pd, collect(phm)等操作。
然而,看你的比赛,你似乎可以逃脱这一切:
MATCH (pd:PolypeptideDomain) WITH pd LIMIT 5
MATCH (pd)<-[:PART_OF]-(phm:ProteinHmmMatch)-[:PART_OF]->(p:Polypeptide)-[:TRANSLATION_OF]->(m:mRNA)
RETURN phm,pd,p,m同样,如果两者之间有许多关系,那么您的数据将是某种程度上的非规范化。
https://stackoverflow.com/questions/33380489
复制相似问题