Neo4j是否可以自动检测上传实体之间的关系,而无需单独的仅包含关系的文件?

66bbxpm5  于 2023-05-28  发布在  其他
关注(0)|答案(3)|浏览(169)

Neo4j是否可以在不上传仅包含关系的文件的情况下检测实体之间的关系?
当我使用Neo4j时,首先我通过上传包含实体的文件来创建节点,然后通过定义实体之间关系的文件(或多个文件)来创建节点之间的关系。是否可以让Neo4j在不上传关系文件的情况下检测关系?例如,我们有两个实体已经被索引并上传,如下所示:A包括:A.ID,A.年份,A.姓名B包括:B.ID,B.Year,B.Name是否可以根据A.ID=B.ID且A.Year<=B.Year来检测A和B之间的关系?

62o28rlo

62o28rlo1#

[更新]
你可以这样做:

MATCH (a:Foo), (b:Foo)
WHERE a <> b AND a.ID = b.ID AND (a.Year < b.Year OR (a.Year = b.Year AND id(a) < id(b)))
CREATE (a)-[:BAR]->(b)

注意事项:
1.为了加快查询速度,您应该考虑在:Foo(ID)上创建索引或uniqueness constraint
1.为了避免创建从Foo节点到其自身的关系,我们指定a <> b条件。

  1. a.Year <= b.Year条件允许相等的Year值,因此同一对Foo节点可以匹配两次(a/b和b/a)。因此,我们指定(a.Year = b.Year AND ID(a) < ID(b))条件,以避免在同一对节点之间创建2个方向相反的关系。id函数返回本机ID,而不是ID属性。
最终调整

虽然上面的查询可以工作,但我们实际上不需要像注解2中所述的那样指定a <> b条件,因为注解3中提到的代码足以强制执行该条件。因此,您可以从查询中省略a <> b AND

k4aesqcs

k4aesqcs2#

实际上,有一种非常酷的方法可以做到这一点,它被称为节点相似性,它的工作原理是将节点的相关属性放入特征向量中,然后在数据之上运行k-最近邻或(近似kNN)算法,这将创建前k个相似(例如:top-5)网络出的数据。
请看这里:
https://neo4j.com/docs/graph-data-science/current/algorithms/similarity/
https://www.youtube.com/watch?v=B1a3b5x1BOUhttps://www.youtube.com/watch?v=FBc__rhm6AYhttps://www.youtube.com/watch?v=Fh-alMQ7h_U

zlwx9yxi

zlwx9yxi3#

为了能够包含所有ID,我应该将约束设置为三个属性的组合,类似于:
CREATE CONSTRAINT a_Key FOR(a:a)REQUIRE(a.Prog,a.ID,a.Year)IS UNIQUE;
B也是如此。但是当我应用帖子中解释的关系时,但是对于特定的b.ID = BP 343,我在最终的图形输出中看到了多个类似的节点,如下所示,因为它们的组合键不同:
BP343 is a sample id from b and green items are ID from a
我需要的只是一个蓝色的节点,因为它们在形状上有相似的ID。这怎么可能?

相关问题