用于测试关系共性的密码查询

cypher query to test relationship commonality

我有一个包含用户和组的 neo4j 数据集。

MATCH (user:User)-[r:Memberof]->(group:Group) RETURN *

现在我想 rate 每个组与所有其他组的共性,以确定所有组之间的相似度百分比(A 组与 B 组共享 95% 的成员资格,82% 的成员资格与 C 组等)

不知道从哪里开始,请帮忙! :)

Neo4j Graph Algorithms Library.

中有一些图算法用于检查相似性

Jaccard Similarity algorithm 看起来很适合这个用例。 Jaccard相似度算法可以用来找出两个事物之间的相似度。

这里可以使用另一种相似度算法,Overlap Similarity algorithm。重叠相似度算法可用于找出哪些事物是其他事物的子集。

您可以找到有关所有可用 Similarity algorithms on Neo4j Documentation page 的更多详细信息和一些很好的示例。您可以参考上面页面上的示例并根据您的要求编写 Cypher 查询。

match (user:User)-[:Memberof]->(group:GroupA)
WITH COUNT(user) AS NUM_A, user
Match (user)-[:Memberof]->(group:GroupB)
RETURN COUNT(user) AS NUM_B, NUM_A

您可以通过这种方式匹配个别组

谢谢拉吉

通过以下查询进行管理....

MATCH (user:User)-[:MemberOf]->(group:Group)
WITH {item:id(group), categories: collect(id(user))} as userData
WITH collect(userData) as data
CALL algo.similarity.jaccard.stream(data, {similarityCutoff: 0.9})
YIELD item1, item2, count1, count2, intersection, similarity
RETURN algo.asNode(item1).name AS from, algo.asNode(item2).name AS to, intersection, (similarity * 100) AS match