neo4j 具有相似关系的密码匹配节点根据相同关系的数量对结果进行排序

ajsxfq5m  于 2023-01-02  发布在  其他
关注(0)|答案(1)|浏览(164)

我有一个图,其中节点/关系如下所示:

(n:Entity)-[r:HasAttribute]->(a:Attribute)

所有实体和属性节点都有一个名为id_obj的属性来标识每个节点。假设我有一个id_obj为"111"的实体(n:Entity {id_obj:'111 '}),并希望找到与Entity-111具有相同属性的所有其他实体节点,即找到具有相同id_obj的相同属性节点的实体节点,并根据相同属性节点的数量对结果(其他实体节点)进行排名...
我一直在看:https://neo4j.com/docs/graph-data-science/current/algorithms/alpha/filtered-node-similarity/,但我不知道如何从一个开始节点(实体-111)开始,然后比较所有其他节点。在第页的示例中,似乎您比较了所有节点并对其进行了排名
谢谢!

h22fl7wq

h22fl7wq1#

可以通过在sourceNodeFilter配置参数上指定来筛选源节点。sourceNodeFilter可以是单个节点ID(或节点ID列表)、单个节点(或节点列表)或标签。
在下面的示例中,我将只过滤第1行中的"Alice",并将其命名为alice。

MATCH (alice:Person) where alice.name = 'Alice'
CALL gds.alpha.nodeSimilarity.filtered.stream('myGraph', {sourceNodeFilter: alice, targetNodeFilter:'Singer' } )
YIELD node1, node2, similarity
RETURN gds.util.asNode(node1).name AS Person1, gds.util.asNode(node2).name AS Person2, similarity
ORDER BY similarity DESCENDING, Person1, Person2

结果:

╒═════════╤═════════╤══════════════════╕
│"Person1"│"Person2"│"similarity"      │
╞═════════╪═════════╪══════════════════╡
│"Alice"  │"Bob"    │0.6666666666666666│
├─────────┼─────────┼──────────────────┤
│"Alice"  │"Carol"  │0.3333333333333333│
└─────────┴─────────┴──────────────────┘

因此,在你的例子中;

MATCH (n:Entity {id_obj:'111'}) 
 CALL gds.alpha.nodeSimilarity.filtered.stream('yourGraph', {sourceNodeFilter: n, targetNodeFilter:'Entity' } )
 and so on...

Reference: https://neo4j.com/docs/graph-data-science/current/algorithms/alpha/filtered-node-similarity/#algorithms-filtered-node-similarity-filter-configuration

相关问题