Neo4j:执行“操作”时性能不佳;加入;在节点链上
下面是一个图表,让您大致了解我的图表的结构: 它只包含附加到:PersonType的:Person节点。每个人都可以表达零个或多个观点。这些意见要么是真实的意见(:意见),要么是从别人那里借来的意见(:意见)。An:OpinionProxy或An:Opinion始终只有一个:表示关系 我写了一个密码查询来回答以下问题: 给我所有“酷家伙”表达的观点,以及每个观点所涉及的人链 示例数据:Neo4j:执行“操作”时性能不佳;加入;在节点链上,neo4j,cypher,Neo4j,Cypher,下面是一个图表,让您大致了解我的图表的结构: 它只包含附加到:PersonType的:Person节点。每个人都可以表达零个或多个观点。这些意见要么是真实的意见(:意见),要么是从别人那里借来的意见(:意见)。An:OpinionProxy或An:Opinion始终只有一个:表示关系 我写了一个密码查询来回答以下问题: 给我所有“酷家伙”表达的观点,以及每个观点所涉及的人链 示例数据: +--------------------+---------------------+----------
+--------------------+---------------------+---------------------+
| person | opinion | influence |
+--------------------+---------------------+---------------------+
| "Dan" | o4 | "Dan" |
+--------------------+---------------------+---------------------+
| "Dan" | o3 | "Dan", "Jim", "Jay" |
+--------------------+---------------------+---------------------+
| "Bob" | ... | ... |
+--------------------+---------------------+---------------------+
下面是一个查询,查找所有“酷家伙”的所有意见:
匹配
(:PersonType{name:“Cool Guys”})(o),
opath=(o)-[:参考*0..]->(op:Opinion)
返回p.name作为个人,op作为意见,opath
到目前为止还不错。现在,复杂的部分来自于试图返回:Person的链,而不是:OpinionProxy-[*0..]->:意见的链。以下是我的尝试:
MATCH
(:PersonType {name: "Cool Guys"})<-[:OF_TYPE]-(p:Person)-[:EXPRESSES]->(o),
opath=(o)-[:REFERENCES*0..]->(op:Opinion)
MATCH (x)<-[:EXPRESSES]-(opAuthor:Person)
WHERE x IN nodes(opath)
RETURN p.name AS person, op AS opinion, collect(opAuthor) AS influence
匹配
(:PersonType{name:“Cool Guys”})(o),
opath=(o)-[:参考*0..]->(op:Opinion)
MATCH(x)您可以尝试在两个MATCH语句之间使用WITH语句。我想现在第一场比赛会反复进行
MATCH
(:PersonType {name: "Cool Guys"})<-[:OF_TYPE]-(p:Person)-[:EXPRESSES]->(o),
opath=(o)-[:REFERENCES*0..]->(op:Opinion)
WITH opath,p,op
MATCH (x)<-[:EXPRESSES]-(opAuthor:Person)
WHERE x IN nodes(opath)
RETURN p.name AS person, op AS opinion, collect(opAuthor) AS influence
匹配
(:PersonType{name:“Cool Guys”})(o),
opath=(o)-[:参考*0..]->(op:Opinion)
伴opath,p,op
MATCH(x)感谢您的回答。虽然您的查询仍然返回正确的数据集,但运行速度同样缓慢。您能为查询生成执行计划吗?在以“profile”开头的neo4 shell中运行您的查询,如下所示:profile MATCH(:PersonType…这是原始查询的配置文件和您的版本:。再次感谢您的关注!
MATCH
(:PersonType {name: "Cool Guys"})<-[:OF_TYPE]-(p:Person)-[:EXPRESSES]->(o),
opath=(o)-[:REFERENCES*0..]->(op:Opinion)
WITH opath,p,op
MATCH (x)<-[:EXPRESSES]-(opAuthor:Person)
WHERE x IN nodes(opath)
RETURN p.name AS person, op AS opinion, collect(opAuthor) AS influence