首页 > 解决方案 > Neo4j 获取属性小于特定值的最大节点

问题描述

在我的 Neo4j 数据库中,有很多节点具有相同的 nodeID 和不同的级别,它们通过路径连接。每次我试图找到具有小于特定级别的最大级别的节点时n。我使用以下 Cypher 查询,它从具有 nodeID 的最新节点开始搜索id

MATCH (:Node{NodeID:id,Current:'true'})-[:type*0..]->(m:Node{NodeID:id}) 
WHERE m.Level < n
RETURN m
ORDER BY m.Level DESC
LIMIT 1

我为这个数据库创建的索引如下:

CREATE INDEX Nodes FOR(n:Node) ON (n.NodeID, n.Level)

但是,它有点慢,特别是当路径很长并且我需要重复这个过程数千次时。所以我的问题是,有没有更好的实现方式,我需要修改我的索引来提高性能吗?在此先感谢您的帮助!

标签: neo4jcypher

解决方案


假设所有相同的NodesNodeID都在以相同节点为type根的路径中,那么以下查询在逻辑上应该是等效的,但速度更快:CurrentNodeID

MATCH (m:Node)
WHERE m.NodeID = $id AND m.Level < $n
RETURN m
ORDER BY m.Level DESC
LIMIT 1

此查询假定id并且n是查询参数


推荐阅读