Neo4j 2.3引入了在范围查找中使用模式标签索引的功能。在Cypher中使用此功能很简单,例如:
MATCH (n:SomeLabel) WHERE n.prop > 200 AND n.prop < 300
正如预期的那样,查询将使用SomeLabel(prop)的索引。
我的问题是,有没有办法用标准的Neo4j Java API复制它?我可以使用GraphDatabaseService.findNodes进行单值模式索引查找,但是我没有看到任何允许范围查询的方法。
我意识到我可以使用Java API运行Cypher查询来完成此任务,但由于我的项目仅使用低级Java API,我希望尽可能避免这种情况,并尽可能保持一致。
答案 0 :(得分:1)
根据Neo4j's documentation,您无法使用属性范围找到节点。
因此,要做你想做的事,你可以匹配每个具有所需标签的节点,并检查Java端的值范围:
假设gdb
是您的GraphDatabaseService,Labels
您的标签枚举:
ResourceIterator<Node> nodes = gdb.findNodes(Labels.SomeLabel);
Set<Node> result = new HashSet<Node>();
while(nodes.hasNext()){
Node n = nodes.next();
// I cast only to ensure I really get an integer
int prop = Integer.valueOf(n.getProperty("prop").toString());
if(prop > 200 && prop < 300){
result.add(n);
}
}
//And here you can return your Set, or do whatever you want with it