密码查询以测试关系的共性

问题描述 投票:0回答:3

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

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

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

还没有线索从哪里开始,请帮忙! :)

neo4j cypher graph-algorithm
3个回答
1
投票

有一些图算法用于检查Neo4j Graph Algorithms Library中的相似性。

Jaccard Similarity algorithm看起来非常适合这个用例。 Jaccard相似度算法可用于找出两件事之间的相似性。

还有一个可用于相似性的算法,Overlap Similarity algorithm。重叠相似度算法可用于找出哪些是其他的子集。

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


0
投票
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

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


0
投票

谢谢Raj

使用以下查询进行管理....

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
© www.soinside.com 2019 - 2024. All rights reserved.