0

ノードが密集している問題があり、これを回避するために、インデックス作成を使用してネイティブ 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
    }
}

これをサイファーにどのように翻訳しますか?何かのようなもの:

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?

関係を取得してから、このような関係を介してエンドノードを取得する場所はどこにもありません。

4

1 に答える 1

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)。

于 2013-06-25T21:31:35.603 に答える