微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Neo4j 查询需要一个永恒的时间来执行

如何解决Neo4j 查询需要一个永恒的时间来执行

我的代码需要一个永恒的时间来计算 jaccard 相似度。它是一个 .csv 文件,其中包含 100000。我已经在 2 个基本节点上创建了索引(id+ 值) 我已经在 Playground 中使用了 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,similarity

有人可以帮忙吗?

enter image description here

解决方法

您查询的前两行语法不正确。你应该像这样运行它:

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

这就是算法 (jaccard) 正在做的事情。如果项目(例如 Item1)具有相同的属性,则该项目(例如 Item1)与另一个项目(如 Item2)相似(从 0 到 1 的数字)。例如; Item1 有 3 个 properties1,2,3,Item2 有 3 个 properties2,3,4。因此 jaccard 相似度指数为 2/4 或 0.5,因为 property2,3 是共同的,并且在这两个项目中有 4 个独特的属性。

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

请参阅此处的参考:https://neo4j.com/docs/graph-algorithms/current/labs-algorithms/jaccard/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。