Neo4j 创建独特的关系需要花费大量时间
Iam由近18000个名称节点组成,我通过改变目标,重复了上述过程,创建了100次以上的唯一关系。这件事花了太多时间。我该怎么解决呢Neo4j 创建独特的关系需要花费大量时间,neo4j,cypher,graph-databases,Neo4j,Cypher,Graph Databases,Iam由近18000个名称节点组成,我通过改变目标,重复了上述过程,创建了100次以上的唯一关系。这件事花了太多时间。我该怎么解决呢 我用java和iterated.iam构建查询,使用neo4j 2.0.0.5和java 1.7。我编辑了您的cypher查询,因为我想我理解它,但我几乎看不懂您问题的其余部分。如果你用空格和标点符号编辑它,你可能更容易理解你想做什么。在此之前,以下是关于您的查询速度缓慢的一些想法 绑定图中的所有节点,这通常非常慢 将图中的所有节点绑定两次。首先在start子句中
我用java和iterated.iam构建查询,使用neo4j 2.0.0.5和java 1.7。我编辑了您的cypher查询,因为我想我理解它,但我几乎看不懂您问题的其余部分。如果你用空格和标点符号编辑它,你可能更容易理解你想做什么。在此之前,以下是关于您的查询速度缓慢的一些想法
names=node(*)
,然后在match子句中全局绑定:match names
,然后才限制模式。我不太清楚Cypher引擎是怎么做的(可能它会偏头痛,然后去煮一壶咖啡)。这是不必要的,至少可以从start子句中删除names=node(*)
。或者删除match子句,我想这也行得通,因为在那里你什么都不做,而且只要你使用遗留索引,你仍然需要一个start子句START names = node(*),
target=node:node_auto_index(target_name="TARGET_1")
MATCH names
WHERE NOT names-[:contains]->()
AND HAS (names.age)
AND (names.qualification =~ ".*(?i)B.TECH.*$"
OR names.qualification =~ ".*(?i)B.E.*$")
CREATE UNIQUE (names)-[r:contains{type:"declared"}]->(target)
RETURN names.name,names,names.qualification
然而,我不知道这样的查询是否能快速查询到您的数据。如果将“名称”标签放在所有节点上,则匹配名称:Name
仍将绑定数据库中的所有节点,因此速度可能仍然较慢
另外,您创建的关系有一个名为contains
的类型
,您给它们一个名为类型
的属性,该属性的值声明为。也许你有一个很好的理由,但这可能会让人很困惑
编辑:
再读一遍你的问题和我的答案,我认为我甚至不理解你的密码查询。(为什么返回这些节点的绑定节点和属性?)请考虑发布示例数据并更详细地解释模型的外观和所做的工作。如果我的答案完全符合你的问题,或者我会考虑删除它。我是NeN4J的初学者,我对索引和标签有点迷惑。你的答案很好。在阅读了你的答案后,我对索引有了一个问题,我引用了NeN4J的索引链接。我已经用csv导入器导入了节点和关系,如何给它们建立索引。。
MATCH target:Target
WHERE target.target_name="TARGET_1"
WITH target
MATCH names:Name
WHERE NOT names-[:contains]->()
AND HAS (names.age)
AND (names.qualification =~ ".*(?i)B.TECH.*$"
OR names.qualification =~ ".*(?i)B.E.*$")
CREATE UNIQUE (names)-[r:contains{type:"declared"}]->(target)
RETURN names.name,names,names.qualification