相关节点上的密码查询过滤器

时间:2019-09-20 06:18:56

标签: neo4j cypher graph-databases

我正在尝试对具有733922个节点和303378个关系的Neo4j Graph数据库应用过滤器,数据库大小为913.56 MiB。我想从一个特定的集合中获取所有具有相关标签的节点,如果我最多给出三个相关节点,则可以正常工作,但是需要花费无限的时间来处理查询。如果我删除订单,那么它最多可用于五个相关标签。这是最优化的查询,还是我在这里做错了什么?我已经为一个相关标签附加了PROFILE输出。

Query Plan

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

1 个答案:

答案 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)