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,我的代码花了很长时间来计算jaccard相似度。它是一个.csv文件,其中包含100000个。我已经在2个基本节点上创建了索引(id+值) 我已经在操场上使用了Jaccard算法,但运行起来也需要很长时间 MATCH (i:Item)-[:HAS]->(p2:Properties)<-[:HAS]-(i1:Item) WITH {item:id(i), categories: collect(id(i1))} as userData WITH collect(userData) as

我的代码花了很长时间来计算jaccard相似度。它是一个.csv文件,其中包含100000个。我已经在2个基本节点上创建了索引(id+值) 我已经在操场上使用了Jaccard算法,但运行起来也需要很长时间

MATCH (i:Item)-[:HAS]->(p2:Properties)<-[:HAS]-(i1:Item)
WITH {item:id(i), categories: collect(id(i1))} as userData
WITH collect(userData) as data
CALL algo.similarity.jaccard.stream(data, {similarityCutoff: 0.5})
YIELD item1, item2, count1, count2, intersection, similarity
RETURN algo.asNode(item1).id AS from, algo.asNode(item2).id AS to, intersection, similarity

MATCH(i:Item)-[:HAS]->(p2:Properties)查询的前两行语法不正确。您应该这样运行它:

OLD: 
MATCH (i:Item)-[:HAS]->(p2:Properties)<-[:HAS]-(i1:Item)
WITH {item:id(i), categories: collect(id(i1))} as userData

NEW: 
MATCH (i:Item)-[:HAS]->(p2:Properties)
WITH {item:id(i), categories: collect(id(p2))} as userData
OLD:
匹配(i:Item)-[:HAS]->(p2:Properties)(p2:Properties)
使用{item:id(i),categories:collect(id(p2))}作为userData
这就是算法(jaccard)所做的。如果一个项目(比如说项目1)和另一个项目(比如项目2)共享相同的属性,那么这两个项目(包括从0到1的数字)与另一个项目(比如项目2)相似。例如项目1有3个属性1、2、3,项目2有3个属性2、3、4。因此,jaccard相似性指数为2/4或0.5,因为属性2,3是常见的,两个项目中有4个独特的属性

因此,在查询中,只需要指定一个项(如item1)具有某些属性,而不需要指定另一个项(如item2)具有某些属性。该函数将迭代所有项,并为您提供jaccard索引,即item1 vs item2、item1 vs item3…、item2 vs item3,依此类推…这是algo.similarity.jaccard.stream的语法


请参阅此处的参考资料:

除非我遗漏了什么,否则您创建的索引不会在此处执行(只有
NodeByLabelScan
)。您应该确保
i1
不引用与
i
相同的节点(您需要所有可能的排列还是只需要不同的对)?@fbiville非常感谢您的回复,我可以简单地通过i1 i调整它吗?@user12678036,您可以通过属性查看每个项目与另一个项目的相似性,从而比较每个项目。因此userData应该类似于{item,collect(properties)},而不是{item1,collect(item2)},因为您查看的是item->properties,而不是项目之间的属性。请参阅下面的答案。如果我这样做,neo4j将返回一个黑屏。。。当然,我一次又一次地重新开始。我有一台内存为32GB的机器…在4.2版本中迁移,不再有内存问题。如果查询现在可以运行,请接受我的答案并进行升级投票。谢谢。我在操场上跑的。但我会检查一下并接受你的回答:)