Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graph Neo4J中生成大图边的智能方法_Graph_Neo4j_Cypher - Fatal编程技术网

Graph Neo4J中生成大图边的智能方法

Graph Neo4J中生成大图边的智能方法,graph,neo4j,cypher,Graph,Neo4j,Cypher,我想从csv文件生成一个图形。行是顶点,列是属性。我想通过顶点上的相似性(不一定是权重)生成边,当两个顶点具有某个属性的相同值时,这两个顶点之间的边将具有值为1或true的相同属性 我遇到的最简单的密码查询如下所示: Match (a:LABEL), (b:LABEL) WHERE a.attr = b.attr CREATE (a)-[r:SIMILAR {attr : 1}]->(b) 该图大约有148000个顶点,Java Heap Size选项是:根据可用的系统资源动态计算 我发

我想从csv文件生成一个图形。行是顶点,列是属性。我想通过顶点上的相似性(不一定是权重)生成边,当两个顶点具有某个属性的相同值时,这两个顶点之间的边将具有值为1或true的相同属性

我遇到的最简单的密码查询如下所示:

Match (a:LABEL), (b:LABEL)
WHERE a.attr = b.attr
CREATE (a)-[r:SIMILAR {attr : 1}]->(b)
该图大约有148000个顶点,
Java Heap Size
选项是:根据可用的系统资源动态计算

我发布的查询给出了一个
Neo.DatabaseError.General.UnknownFailure
,并提示上面的Java堆空间


我能想到的一个问题是,首先构建一个巨大的笛卡尔积,然后寻找匹配项来创建边。有没有一种更聪明的方法,也许是一种连续的方法可以做到这一点?

你是对的,huuuge cartesian产品将被生产出来

对于eg,您可以成批地迭代1000个a节点,并通过在每次迭代中增加SKIP值来运行查询,直到它返回0

MATCH (a:Label)
WITH a LIMIT SKIP 0 LIMIT 1000
MATCH (b:Label)
WHERE b.attr = a.attr AND id(b) > id(a)
CREATE (a)-[:SIMILAR_TO {attr: 1}]->(b)
RETURN count(*) as c

我认为您需要对模型进行一些更改:不需要通过特定属性的值将每个节点彼此连接起来。最好有一个中间节点,将具有相同值属性的节点绑定到该节点

这可以在导出时或以后完成

例如:

Match (A:LABEL) Where A.attr Is Not Null
Merge (S:Similar {propName: 'attr', propValue: A.attr})
Merge (A)-[r:Similar]->(S)
稍后,通过单独的查询,您可以删除只有一个连接的类似节点(没有其他节点具有与此属性相同的值):


太好了,非常感谢!我要建立一个二部图。这会让事情变得容易得多。@Wipster谢谢你提出的有趣的问题:)
Match (S:Similar)<-[r]-()
With S, count(r) As r Where r=1 
Detach Delete S
Match (A:LABEL) Where A.attr Is Not Null
With A, Keys(A) As keys
  Unwind keys as key
    Merge (S:Similar {propName: key, propValue: A[key]})
    Merge (A)-[:Similar]->(S)