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
Iam由近1,80,000个名称节点组成,我通过更改目标迭代上述过程以创建超过100次的独特关系。它花了太多时间。我怎么解决它..
我用java和iterated.iam使用neo4j 2.0.0.5和java 1.7构建查询。
答案 0 :(得分:2)
我编辑了你的密码查询因为我认为我理解它,但我几乎无法阅读你的其余问题。如果您使用空格和标点符号进行编辑,则可能更容易理解您要执行的操作。在此之前,以下是关于您的查询速度缓慢的一些想法。
names=node(*)
,然后在你的匹配子句中普遍绑定:MATCH names
,然后才限制你的模式。我不太清楚Cypher发动机是做什么的(可能是偏头痛,然后去煮一壶咖啡)。这是不必要的,你至少可以从你的起始条款中删除names=node(*)
。或者删除match子句,我想这也可以工作,因为你没有真正做任何事情,只要你使用遗留索引,你仍然需要一个start子句。因此,首先尝试删除其中一个节点的通用绑定,然后使用2.x schema工具构建数据。您应该能够编写像
这样的查询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
但是,我不知道这样的查询是否会对您的数据造成快速影响。如果在所有节点上放置“Name”标签,那么MATCH names:Name
仍将绑定数据库中的所有节点,因此它可能仍然很慢。
P.S。您创建的关系有一个名为TYPE
的{{1}},您为其提供了一个名为contains
的属性,其值为type
。也许你有充分的理由,但这可能非常令人困惑。
修改强>
再次阅读你的问题和我的答案,我不再认为我理解你的密码查询。 (为什么要返回这些节点的绑定节点和属性?)请考虑在console.neo4j.org上发布样本数据,并更详细地解释您的模型是什么样的以及您要做什么。如果我的回答完全符合您的问题或者我会考虑删除它,请告诉我。