Neo4j 查询需要永恒的时间来执行
Neo4j query takes an eternity to execute
我的代码需要一个永恒来计算 jaccard 相似度。它是一个包含 100000 的 .csv 文件。我已经在 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, intersection, similarity
有人可以帮忙吗?
您查询的前两行语法不正确。你应该 运行 像这样:
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)与另一个项目(如 Item2)相似(从 0 到 1 的数字),如果两者具有相同的属性。例如; Item1 有 3 个属性 1、2、3,Item2 有 3 个属性 2、3、4。所以 jaccard 相似度指数是 2/4 或 0.5,因为 property2,3 是共同的并且两个项目中有 4 个独特的属性。
So in your query, you only need to specify that an item (like item1) has some properties and you don't need to specify another item (like item2) has some properties. The function will iterate all items and will give you the jaccard index, that is, item1 vs item2, item1 vs item3..., item2 vs item3, so on...This is the syntax for algo.similarity.jaccard.stream.
在此处查看参考资料:https://neo4j.com/docs/graph-algorithms/current/labs-algorithms/jaccard/
我的代码需要一个永恒来计算 jaccard 相似度。它是一个包含 100000 的 .csv 文件。我已经在 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, intersection, similarity
有人可以帮忙吗?
您查询的前两行语法不正确。你应该 运行 像这样:
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)与另一个项目(如 Item2)相似(从 0 到 1 的数字),如果两者具有相同的属性。例如; Item1 有 3 个属性 1、2、3,Item2 有 3 个属性 2、3、4。所以 jaccard 相似度指数是 2/4 或 0.5,因为 property2,3 是共同的并且两个项目中有 4 个独特的属性。
So in your query, you only need to specify that an item (like item1) has some properties and you don't need to specify another item (like item2) has some properties. The function will iterate all items and will give you the jaccard index, that is, item1 vs item2, item1 vs item3..., item2 vs item3, so on...This is the syntax for algo.similarity.jaccard.stream.
在此处查看参考资料:https://neo4j.com/docs/graph-algorithms/current/labs-algorithms/jaccard/