Optimization Neo4J用于创建节点间关系的优化

Optimization Neo4J用于创建节点间关系的优化,optimization,neo4j,graph-databases,Optimization,Neo4j,Graph Databases,我正在处理大约50000条tweets作为节点,其数据类似,如下所示 { “日期”:“2017-05-26T09:50:44.000Z”, “作者姓名”:“djgoodlook”, “共享计数”:0, “提到你的名字”:“firstpost”, “tweet_id”:“868041705257402368”, “提及id”:“256495314”, “地点”:“浦那印度”, “转发id”:“8680398627774931456”, “类型”:“转发”, “作者id”:“103535663”,

我正在处理大约50000条tweets作为节点,其数据类似,如下所示

{
“日期”:“2017-05-26T09:50:44.000Z”,
“作者姓名”:“djgoodlook”,
“共享计数”:0,
“提到你的名字”:“firstpost”,
“tweet_id”:“868041705257402368”,
“提及id”:“256495314”,
“地点”:“浦那印度”,
“转发id”:“8680398627774931456”,
“类型”:“转发”,
“作者id”:“103535663”,
“标签”:“KamalHaasan”
}

我试着通过使用下面的命令在具有相同位置的tweet之间建立关系

匹配(a:TweetData),(b:TweetData)
其中a.location=b.location而非a.tweet\u id=b.tweet\u id
创建(a)-[r:SameLocation]->(b)
返回r

使用这个命令,我无法建立关系,因为它花费了20多个小时,仍然没有产生结果。而对于hashtagrelationship,它使用类似的命令工作得很好,因为它大约需要5分钟。
是他们建立关系的任何其他方法或优化此查询的任何方法。是。首先,确保在:TweetData(location)上有一个索引,这是最重要的更改,因为如果没有索引,每个节点查找都必须扫描所有50k:TweetData节点以查找公共位置(即50k^2个查找)

接下来,最好确保一个节点的id小于另一个,否则将得到两对相同的节点,顺序颠倒,结果是每对节点都有两个关系,一个方向一个,而不是只需要一个关系

最后,您真的需要返回所有关系吗?这可能会杀死你的浏览器,可能只返回添加的关系数

MATCH (a:TweetData)
MATCH (b:TweetData)
WHERE a.location = b.location AND a.tweet_id < b.tweet_id
CREATE (a)-[r:SameLocation]->(b)
RETURN count(r)

如果一次50k节点太多,这种方法也更容易进行批处理。您可以在比赛后使用LIMIT和SKIP切换到
a

谢谢您的建议,这对我很有帮助。我不理解第一部分,你说除了使用“限制”和“跳过”之外,我们应该如何减少50k^2的查找。确保你有一个索引:TweetData(location),这是最重要的更改。每当您有很多节点,并且需要通过特定属性查找特定类型的节点时,最好在标签/属性上有一个索引,以便您的匹配变得非常快。
MATCH (a:TweetData)
MERGE (l:Location {name:a.location})
CREATE (a)-[:LOCATION]->(l)