Neo4j Java API - 模式索引范围查找?

时间:2015-11-14 18:11:15

标签: java neo4j

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,我希望尽可能避免这种情况,并尽可能保持一致。

1 个答案:

答案 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