我正在尝试对具有733922个节点和303378个关系的Neo4j Graph数据库应用过滤器,数据库大小为913.56 MiB。我想从一个特定的集合中获取所有具有相关标签的节点,如果我最多给出三个相关节点,则可以正常工作,但是需要花费无限的时间来处理查询。如果我删除订单,那么它最多可用于五个相关标签。这是最优化的查询,还是我在这里做错了什么?我已经为一个相关标签附加了PROFILE输出。
MATCH p=(node1:label1{value:'a2cb2c487d9da6941f0f9c1692ed1a5a', source: 'a0b116e2-d9f5-40d4-97ff-6ca6f2ec6c9b'})-[r]-> (:a),(:b),(:c),(:d),(:e),(:f),(:g),(:h),(:i),(:j)
RETURN node1,r
ORDER BY node1.created DESC
LIMIT 25
答案 0 :(得分:1)
以下
(:b),(:c),(:d),(:e),(:f),(:g),(:h),(:i),(:j)
在带有标签b,c,d等的所有节点之间创建笛卡尔积,该笛卡尔积将快速增长。
如果您要使用a..b标签,请使用以下标签:
MATCH p=(node1:label1{value:'a2cb2c487d9da6941f0f9c1692ed1a5a', source: 'a0b116e2-d9f5-40d4-97ff-6ca6f2ec6c9b'})-[r]-> (related)
WHERE related:a OR related:b OR ....
如果您想将标签作为参数labels
传递,则可以在WHERE
子句中使用following
WHERE any(x in labels(n) WHERE x in $labels)