0

Neo4jにグラフがあり、ノードは平面内のランダムな点を表し、各ノードにはプロパティとして保存された座標があります(xとy、値のタイプはdouble)。
ノードを作成してインデックスを作成します。

    IndexManager index = graph.index();
    Index<Node> nodesIndex = index.forNodes("points");

    for (int i = 0; i < points.length; i++) {
        Point p = points[i]; 
        Node n;

        Transaction tx = graph.beginTx();
        try {
            n = graph.createNode();
            n.setProperty("x", p.getX());
            n.setProperty("y", p.getY());

            nodesIndex.add(n, "x", new ValueContext(p.getX()).indexNumeric());
            nodesIndex.add(n, "y", new ValueContext(p.getY()).indexNumeric());

            tx.success();
        } finally {
            tx.finish();
        }
    }

さて、私がする必要があるのは、正方形の領域にあるノードを照会することです。たとえば、次のクエリを実行しました。

http://localhost:7474/db/data/index/node/points?query=x:[0.0 TO 3.0] AND y:[0.0 TO 3.0]

そして、これは応答です:

    Node
    Properties
    y   1.0
    x   14.0
    Node info
    self    /db/data/node/10

    Node
    Properties
    y   1.0
    x   2.0
    Node info
    self    /db/data/node/7

    Node
    Properties
    y   1.0
    x   6.0
    Node info
    self    /db/data/node/8

    Node
    Properties
    y   1.0
    x   7.0
    Node info
    self    /db/data/node/9

[Etc...]

ご覧のとおり、機能していません。そして、その理由がわかりません(おそらく、インデックスを構成する必要がありますか?)。Luceneを使用する必要
ないことに注意してください。Cypherを使用してその情報を収集する方法がある場合(正方形の領域の中央にあるノードから開始する)、実際にはより良いでしょう。なぜなら、見つかったノード間の関係も必要だからです。

追加情報 それが重要な場合、グラフは平面上のランダムな点のセットでのドロネー三角形分割を表します。より抽象的な言葉で言えば、特定の領域にあるサブグラフ全体を「抽出」する必要があります。

どんな助けでも本当にありがたいです!

4

1 に答える 1

0

サイファーを介してこれを行うことはできません。Cypherがこのクエリに数値の値コンテキストを使用することを推測する方法はありません(将来のリリースでは、おそらくいくつかのインデックスメタ情報に含まれる可能性があります)。Luceneに希望の方法でクエリを実行できるようにする必要があります。RESTを超える最も簡単な方法は、おそらくGroovyを使用することです。http://docs.neo4j.org/chunked/snapshot/gremlin-plugin.html#rest-api-send-an-arbitrary-groovy-でカスタムソート(同じ問題)を参照してください。スクリプト---lucene-sorting

于 2012-04-17T08:39:03.917 に答える