通过索引查找与cypher执行匹配

时间:2013-06-25 18:46:52

标签: neo4j cypher

我有一个密集的节点问题,为了解决这个问题,我一直在使用索引来使用本机Java API执行一些匹配,但我一直在给Cypher一个第二眼,想知道是否可以这样做。目前我的模式在Java代码中看起来像这样:

Node startNode = db.getNodeById(1);
Index<Relationship> relationshipIndex = db.index.forRelationships("relationships");

for(Relationship relationship1 : startNode.getRelationships(Direction.OUT)) {
    Node otherNode = relationship.getOtherNode(startNode);
    String indexValue = (String)otherNode.getProperty("indexValue");
    for(Relationship relationship2 : relationshipIndex.get("indexKey", indexValue)){
        Node endNode = relationship.getOtherNode(startNode);
        //Processing on the endNode
    }
}

我如何将其翻译为cypher?类似的东西:

START startNode=node(1)
MATCH startNode-[r1]->otherNode
WITH node:relationships("indexValue:" + otherNode.indexValue) as r2
RETURN r2.endNode //Notation for getting node off relationship?

我真的没有看到任何关系,只是通过这样的关系得到终端节点。

1 个答案:

答案 0 :(得分:2)

是的,在2.0中有一个startNode(rel)/ endNode(rel)函数,但它不适用于1.9或更早版本。

http://console.neo4j.org/r/4807s7

理论上你可以做到这一点:

start rel=rel:rel_auto_index(indexKey="value") 
with endNode(rel) as n
match n-->m
return *

这样可以避免触及关系的startNode(除非有n指针返回它。)