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

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

我正在尝试在 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) 计算每个节点 1 和节点 2 之间的所有相似度,然后仅过滤主席 1 的结果?

B) gds 仅计算 Chair1 和其他每个节点之间的结果吗? 我需要行为 B 发生在我身上,但在对机场数据库进行一些测试后,似乎没有 WHERE 子句的执行时间比有 WHERE 子句的执行时间更短,所以我的鼻子告诉我这可能是行为 A。

有没有办法强制行为B?

neo4j cypher similarity
1个回答
0
投票

正如 Neo4j 开发人员所评论的,截至目前,对于上述代码片段,GDS 正在计算所有相似性并对结果进行后过滤(WHERE 应用于节点相似性算法的结果流)。

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

© www.soinside.com 2019 - 2024. All rights reserved.