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,下面是一个图表,让您大致了解我的图表的结构: 它只包含附加到:PersonType的:Person节点。每个人都可以表达零个或多个观点。这些意见要么是真实的意见(:意见),要么是从别人那里借来的意见(:意见)。An:OpinionProxy或An:Opinion始终只有一个:表示关系 我写了一个密码查询来回答以下问题: 给我所有“酷家伙”表达的观点,以及每个观点所涉及的人链 示例数据: +--------------------+---------------------+----------

下面是一个图表,让您大致了解我的图表的结构:

它只包含附加到: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