Neo4j变长路径搜索缓慢

时间:2019-03-26 06:57:37

标签: neo4j cypher neo4j-ogm neo4j-apoc

我打算通过match (c:Column {schema:'a.b', name:'c'})<-[cd:CD*1..3]-(c_up:Column) return c, cd, c_up检索到特定节点的最近距离小于N的所有传入节点,这实际上需要大约。 8s返回所有结果。我试图通过profile {sql}对其进行概要分析,这就是返回的结果:

https://i.ibb.co/fYbD2vn/WX20190326-145433-2x.png(在我当前的情况下,图像粘贴在stackoverflow中会崩溃,因此我粘贴到了另一台主机上)

我已经通过CREATE INDEX ON :Column(schema, name)创建了索引,但这对var-length路径搜索的执行计划没有任何帮助。有什么想法可以优化VarLengthExpandFilter上的巨大数据库匹配吗?谢谢。

2 个答案:

答案 0 :(得分:0)

  

我已经通过CREATE INDEX ON:Column(schema,name)创建了索引,但是它对变长路径搜索的执行计划没有任何帮助。

您的索引并不能直接帮助varlengthexpand,但实际上可以大大加快查询速度。 (看一下第一个操作NodeIndexSeeker,它仅返回2个匹配项)

针对您的用例:

  

我打算检索所有最近的距离小于N的传入节点,

我认为返回cd是浪费,您可以使用distinct避免两次返回节点c_up

首页有一个示例:DISTINCT nodes from variable-length paths

MATCH (c:Column {schema:'a.b', name:'c'})<-[cd:CD*1..3]-(c_up:Column) 
RETURN DISTINCT c, c_up

答案 1 :(得分:0)

我认为您的问题不只是看起来很的查询,而是:

  1. 将6000个节点返回到neo4j浏览器可视化中(以及更多的关系
  2. 使用专用客户端获取数据或检查cypher-shell
  3. 检查您的内存配置,可能是它必须从磁盘中获取内容(页面缓存和堆设置)