我有图:(:Sector)<-[:BELONGS_TO]-(:Company)-[:PRODUCE]->(:Product)
。Neo4j/Cypher匹配遍历分支中的前n个节点
我在查找以下查询。
开始于(:Sector)
。然后匹配该部门的前50家公司,并为每家公司匹配前10个产品。
第一个限制很简单。但是限制产品呢。
cypher可能吗?
UPDATE
由于@cybersam建议如下查询将返回有效的结果
MATCH (s:Sector)<-[:BELONGS_TO]-(c:Company)
WITH c
LIMIT 50
MATCH (c)-[:PRODUCE]->(p:Product)
WITH c, (COLLECT(p))[0..10] AS products
RETURN c, products
但是这种解决方案不能扩展,因为它依然穿越每家公司的所有产品。收集每个公司产品后应用切片。随着产品数量的增长,查询性能会下降。
欢呼@cybersam。这个查询起作用。但如果每家公司的产品数量增长,它将如何扩展?你仍然会匹配所有产品,将它们分组并限制后。我有兴趣是否可以在匹配一定数量的节点时停止匹配。 – drgraduss
这是一个很好的问题。不幸的是,我没有看到使用'LIMIT'的方法,因此它只限制每个公司的产品。 – cybersam
好的。似乎Traversal Framework API是我的答案。我将接受有关可伸缩性的说明。感谢您的帮助@cybersam。 – drgraduss