4

空間プラグインがインストールされた最新の neo4j v2 を実行しています。geo インデックスにインデックスを付ける必要があるほとんどすべてのノードにインデックスを付けることができました。私が苦労している問題の 1 つは、ノードが既にインデックス化されているかどうかを簡単に確認する方法です。

この情報を取得するための REST エンドポイントが見つからず、サイファーでこれに到達するのは簡単ではありません。しかし、ランタイムが受け入れられないことを除いて、私が望む結果が得られるように見えるので、このクエリを試しました。

MATCH (a)-[:RTREE_REFERENCE]->(b) where b.id=989898 return b;

geo インデックスは、関係 RTREE_REFERENCE によって参照されるノードの id のプロパティ値でインデックス付けされたノードへの参照のみを格納するため、これが進むべき道であると考えました。

このクエリは次のようになります:14459 msから実行しneo4j-shellます。

私のデータベースは41000 nodes、合計で空間インデックスに追加したいほど大きくありません。

これを行うためのより良い方法があるはずです。どんなアイデアやポインタでも大歓迎です。

4

2 に答える 2

1

データノードの ID を知っているので、Cypher でインデックスなしで直接アクセスでき、着信 RTREE_REFERENCE 関係を確認するだけです。

START n=node(989898) MATCH (p)-[r:RTREE_REFERENCE]->(n) RETURN r;

サイド ノードとして、Cypher には構文 'WHERE n.id=989898' がありましたが、これが内部ノード ID である場合、n.id はキー 'id' を持つプロパティを探すため、機能しません。内部ノード ID には、「id(n)」を使用します。

あなたの「id」が実際にノードプロパティである場合(内部IDではない場合)、@deemeetreeの提案は、このプロパティのインデックスを使用する方が良いと思います。

于 2014-02-21T12:56:47.633 に答える
0

現在、あなたのリクエストは、:RTREE_REFERENCE に関連するネットワーク内のすべてのノードを精査し、それぞれの id プロパティをチェックしているようです。

代わりに、必要なノード ID から検索を開始して、そのようなすべてのパスを取得してみませんか?

また、定義しているノードを返す必要がある理由もよくわかりませんが、とにかく。

Neo4J を実行しているので、ノードにラベルを追加することをお勧めします (以下の例ではすべてラベルを付けています)。

START n=node(*) SET n:YOUR_LABEL_NAME

次に、ラベル付けされたノードに id プロパティでインデックスを作成します。

CREATE INDEX ON :YOUR_LABEL_NAME(id)

それが完了したら、次のようなクエリを実行します。

MATCH (b:YOUR_LABEL_NAME{id:"989898"}), a-[:RTREE_REFERENCE]->b RETURN a,b;

これにより、クエリの速度が向上するはずです。

それがうまくいくかどうか教えてください。すでに知っている場合は、元の質問で b をクエリしていた理由を説明してください...

于 2014-02-13T12:11:30.890 に答える