单个节点与整个图的 Neo4j 相似性

Neo4j similarity of single node with entire graph

我正在尝试在 neo4j 中使用 gds 来计算相似度。我了解如何让 gds 计算内存图中的所有相似性,但这实际上回答了“告诉我,在整个图中,每对节点的相似性”这个问题。 现在我的问题不同了,我的问题是“给定这个节点 N,给我 N 与其他所有节点的相似度”。显然后者的性能会快得多.. 我试图用这种类型的查询来表达这一点:

CALL gds.nodeSimilarity.stream('test', { relationshipWeightProperty: 'strength', similarityCutoff: 0.1 })
YIELD node1, node2, similarity
WITH gds.util.asNode(node1) AS n1, gds.util.asNode(node2)AS n2, similarity
WHERE n1.name = "Chair1"
RETURN n1.name, n2.name, similarity
ORDER BY n1.name

但幕后到底发生了什么? 是 gds : A) 计算每个 node1 和 node2 之间的所有相似性,然后只为 Chair1 过滤结果? 要么 B) gds 是否只计算 Chair1 和所有其他节点之间的结果? 我需要行为 B 发生在我身上,但在对机场数据库进行一些测试后,似乎没有 WHERE 子句的执行时间比有 WHERE 子句的执行时间更短,所以我的鼻子告诉我这可能是行为 A。有没有办法强制行为 B?

正如一位 Neo4j 开发人员所评论的那样,截至目前,对于上述代码片段,GDS 正在计算所有相似度和 post-filtering 结果(WHERE 应用于节点相似度算法的结果流) .

2.1 版将发布更复杂的过滤器,但与此同时,这个答案可能会澄清某些人的行为。干杯!