这对我有帮助:
https://neo4j.com/docs/graph-algorithms/current/algorithms/similarity-jaccard/
重要的是,您要比较的所有节点都在同一个图中并相互连接。
MATCH (p:Person)-[:LIKES]->(cuisine)
WITH {item:id(p), categories: collect(id(cuisine))} as userData
WITH collect(userData) as data
CALL algo.similarity.jaccard.stream(data)
YIELD item1, item2, count1, count2, intersection, similarity
RETURN algo.getNodeById(item1).name AS from, algo.getNodeById(item2).name AS to, intersection, similarity
ORDER BY similarity DESC
应该是这样的,(这取决于你的数据库)
MATCH (p:Merchant)-[:BUY]->(consumer)
WITH {item:id(p), categories: collect(id(consumer))} as userData
WITH collect(userData) as data
CALL algo.similarity.jaccard.stream(data)
YIELD item1, item2, count1, count2, intersection, similarity
WHERE similarity > 0.9
RETURN algo.getNodeById(item1).name AS from, algo.getNodeById(item2).name AS to, intersection, similarity
ORDER BY similarity DESC
据我了解,它使用 jaccard (https://en.wikipedia.org/wiki/Jaccard_index) 作为节点 ID。
PS:安装插件以使用它很重要:
https://neo4j.com/docs/graph-algorithms/current/introduction/#_installation