微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何优化递归查询 - Neo4j?

如何解决如何优化递归查询 - Neo4j?

我正在使用 Neo4j 开发联系人跟踪框架。有两种类型的节点,即人员和位置。 Person 和 Location 之间存在一个 VISITED 关系,它具有属性 startTS 和 endTS。示例:

enter image description here

现在假设第 1 个人被感染。我需要找到所有与此人有过接触的人。对于识别出的每个人,我需要找到与该人有过接触的所有其他人。重复此过程,直到识别出的人还没有遇到任何人。这是一个工作代码

MATCH path = (infected:Person {id:'1'})-[*]-(otherPerson:Person)
WITH relationships(path) as rels,otherPerson
WHERE all(i in range(1,size(rels)-1)
  WHERE i % 2 = 0
  OR (rels[i].endTS >= rels[i-1].startTS AND rels[i].startTS <= rels[i-1].endTS)
)
RETURN otherPerson

问题在于,处理大型数据集需要花费太多时间。上面的查询可以优化吗?感谢您的帮助。

解决方法

不幸的是,对于这一点,我们在扩展期间过滤这些更复杂条件的语法存在一些限制。我们可以介绍扩展后过滤,但您需要一个上限,否则在更复杂的图形上效果不佳。

要获得您今天需要的内容(在扩展期间而不是之后进行过滤),您需要利用我们的遍历 API 在 Java 中实现一个自定义过程,然后在您的 Cypher 查询中调用该过程。

已经为 GQL 提出了可以涵盖这些情况的高级语法,我们绝对希望在 Cypher 中使用它。它在我们的积压工作中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。