两个知识图之间共享三元组

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

我想使用 cypher 来比较两个语义知识图,看看它们是否有共同的三元组。

MATCH (n1)-[r1]-(c1)
MATCH (n2)-[r2]-(c2)  
WHERE r1.filePath = "../data/graph1.json" 
AND r2.filePath = "../data/graph2.json"
AND n1 = n2
AND r1 = r2
AND c1 = c2
RETURN n1, n2, r1, r2, c1, c2

这两个图是在neo4j中加载的,区分它们的唯一方法是rel属性“filePath”。

这是正确的做法吗? 还有其他算法来搜索图之间的相似性吗?

neo4j cypher similarity semantics knowledge-graph
1个回答
0
投票

您说“两个语义知识图”,这让我认为您有两个 Neo4j 数据库,但您的代码意味着您有一个图数据库,其中(可能)有两组不同的数据。我假设是后者。

您的代码不会按您预期的方式工作。通过说

r1 = r2
,您可以确定这些是完全相同的关系对象。您可能想要
type(r1) = type(r2)
,但最好指定为:

MATCH (n1)-[r1:MY_REL_TYPE]-(c1)
MATCH (n2)-[r2:MY_REL_TYPE]-(c2)

此外,说

n1 = n2
c1 = c2
意味着您正在寻找在它们之间具有两个具有不同属性的 MY_REL_TYPE 关系的节点。如果这就是你想要的,那就更简单了:

MATCH (n1)-[r1:MY_REL_TYPE]-(c1)
MATCH (n1)-[r2:MY_REL_TYPE]-(c1)
WHERE r1.filePath = "../data/graph1.json" 
AND r2.filePath = "../data/graph2.json"
RETURN n1, r1, r2, c1

但是,如果 n1 和 n2 旨在成为单独的节点,您可能希望标签匹配:

MATCH (n1:MyNodeLabel)-[r1:MY_REL_TYPE]-(c1:MyOtherNodeLabel)
MATCH (n2:MyNodeLabel)-[r2:MY_REL_TYPE]-(c2:MyOtherNodeLabel)
WHERE r1.filePath = "../data/graph1.json" 
AND r2.filePath = "../data/graph2.json"
RETURN n1, n2, r1, r2, c1, c2

最后,是的,有一些算法可以找到图形相似性,但我不确定这是你的目标,因为你想要匹配特定的东西,而不是整体图片。

希望有帮助。 :)

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