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
如何使这个neo4j查询更快?_Neo4j_Graph Databases - Fatal编程技术网

如何使这个neo4j查询更快?

如何使这个neo4j查询更快?,neo4j,graph-databases,Neo4j,Graph Databases,我有一个包含以下四个节点的数据库: 商店,吉他,吉他模型,配件 *吉他是指一个人可以拥有/弹奏的特定吉他 optional match (a:Store), (b:Guitar), (c:GuitarModel), (d:Accessory) where a.StoreNumber ="1234" and (a)-[:ContainsGuitar]->(b) and (b)-[:IS_OF_MODEL]->(c) and ((d)-[:COMES_STANDARD]-(c) OR

我有一个包含以下四个节点的数据库:

商店,吉他,吉他模型,配件

*吉他是指一个人可以拥有/弹奏的特定吉他

optional match (a:Store), (b:Guitar), (c:GuitarModel), (d:Accessory)
where a.StoreNumber ="1234" and (a)-[:ContainsGuitar]->(b) and
(b)-[:IS_OF_MODEL]->(c) and 
((d)-[:COMES_STANDARD]-(c) OR (d)-[:COMES_OPTIONAL]-(c) OR (d)-:COMES_OPTION_UPGRADE]-(c) OR (d)-[:COMES_UPGRADE]-(c))
return b.name, collect(d.name)
我现在的问题是这个查询非常慢,大约需要120000毫秒才能执行

我有67000个节点和131000个关系

我是不是做错了什么,让事情变得这么慢

您对:storenumber有索引/约束吗? 为什么只使用可选的匹配项?您可以组合匹配和可选匹配 你为什么在WHERE子句中使用你的模式?你应该把它直接放在火柴上。 我认为您的查询在节点之间创建了笛卡尔积,这就是为什么它如此缓慢的原因

您可以尝试以下查询:

MATCH 
  (:Store { StoreNumber:"1234" })-[:ContainsGuitar]->(b)
RETURN 
  b.name, 
  [(b)-[:IS_OF_MODEL]->(:GuitarModel)-[:COMES_STANDARD|COMES_OPTIONAL|COMES_OPTION_UPGRADE|COMES_UPGRADE]-(d:Accessory) | d.name]

当WHERE子句中有模式谓词时,它将在匹配后用作过滤器。因此,您将获得特定商店的所有:吉他的交叉产品、所有:吉他模型的交叉产品、所有:配件的交叉产品,然后过滤到与特定商店有关系的产品。正如logisima所说,在匹配中使用模式,这样它就可以直接从:Store遍历到关联的节点,并避免多个交叉产品。