限制Neo4j中的子节点性能

时间:2015-08-31 02:55:30

标签: neo4j cypher nosql

我正在编写一个密码,以便使用此密码获得每个类别5个产品的输出:

MATCH (s:Supplier)-[:POST]->(p:Product)-[:BELONG_TO]->(c:Category) 
WITH *
MATCH r = (c)<-[:BELONG_TO*0..5]-(p)
WITH c, collect(tail(nodes(r))) AS allCatProducts
RETURN c, reduce(outputProducts=allCatProducts[..0] , catProduct IN allCatProducts | outputProducts + catProduct)[..5];

但是,这个密码的性能非常差。我有什么不对吗?

另外,我试图理解这部分:

[:BELONG_TO*0..5]

(catProduct)[..5]

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

您似乎使查询过于复杂,此查询应该完成这项工作:

MATCH (s:Supplier)-[:POST]->(p:Product)-[:BELONG_TO]->(c:Category)
RETURN c.name, collect(p)[..5] as products

关于你的其他问题:

(x)-[r:BELONG_TO*0..5]->(y)

是可变长度路径查询,但在此您应该知道,如果找不到y节点,则x将返回为y

http://neo4j.com/docs/stable/query-match.html#_relationships_in_depth

http://graphaware.com/graphaware/2015/05/19/neo4j-cypher-variable-length-relationships-by-example.html

(collection)[..5]

告诉我只返回集合的前5个元素,集合就像Java中的List或者php中的array