如何优化neo4j查询。Neoj4显示了此警告:“您必须遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他有关法律法规。”;此查询在断开连接的模式之间构建笛卡尔积;
我正在尝试运行此查询如何优化neo4j查询。Neoj4显示了此警告:“您必须遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他有关法律法规。”;此查询在断开连接的模式之间构建笛卡尔积;,neo4j,Neo4j,我正在尝试运行此查询 MATCH (p:Post), (me:User{username: 'someUsername'}) WHERE ( ( (me)-[:user_posted_post|user_share_post|post_in_gr|post_in_page]-(p) OR ( (me)-[{subscribe: '1'}]-()-[:post_in_gr]-(p)
MATCH (p:Post), (me:User{username: 'someUsername'}) WHERE (
(
(me)-[:user_posted_post|user_share_post|post_in_gr|post_in_page]-(p) OR
(
(me)-[{subscribe: '1'}]-()-[:post_in_gr]-(p)-[:user_posted_post|user_share_post]-({status:'active'}) OR
(me)-[{subscribe: '1'}]-()-[:post_in_page]-(p)-[:user_posted_post|user_share_post]-({status:'active'}) OR
(me)-[:user_author_page]-()-[:post_in_page]-(p)-[:user_posted_post|user_share_post]-({status:'active'}) OR
(me)-[{subscribe: '1'}]-({status:'active'})-[:user_posted_post|user_share_post]-(p:Post{system_type: 'page'}) OR
(me)-[{subscribe: '1'}]-({status:'active'})-[:user_posted_post|user_share_post]-(p) AND NOT (p)-[:post_in_gr]-() AND NOT (p)-[:post_in_page]-() OR
(me)-[:user_create_com]-()-[:com_in_post]-(p)
)
AND p.access IN ['everybody', 'friend'] OR
(me)-[:user_can_see_post|user_posted_post]-(p) AND p.access = 'custom'
)
)
AND p.hidden_id IS NULL AND NOT (me)-[:user_hide_post]-(p) RETURN p ORDER BY p.updated_at DESC
Neo4j说:“此查询在断开连接的模式之间构建笛卡尔乘积”,并且运行速度非常慢,大约8秒。这个警告是什么意思?我如何避免它并使它更快地工作 您正在构建一个
笛卡尔积
,因为这部分:(p:Post),(me:User{username:'someUsername'})
这里您定义了一个不相交的模式:(p:Post)
&(me:User{username:'someUsername})
。因此DB必须在这两个不同的集合之间创建cartesain乘积
但我假设您对:User(username)有一个唯一的约束,所以笛卡尔函数实际上是1xN,所以它是sOK(Neo4j消息只是一个警告)
由于where子句复杂,查询速度较慢,其中包含大量的或。您可以尝试将其直接放在匹配
部分或可选匹配
中,而不是放在where子句中
此外,我认为您的查询可以被切割成多个简单的查询,您可以使用联合
将它们连接起来
干杯谢谢。我通过一个联盟加入他们,现在它的工作速度快了5倍。但现在还有另一个麻烦。由于我使用的是Neo4j 2.3.2,因此无法对所有UNION
查询的结果进行排序。