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 收集该信息(从以正方形区域为中心的节点开始)实际上会更好,因为我还需要找到的节点之间的关系。

附加信息 如果这很重要,该图表示平面上随机点集上的 Delaunay 三角剖分。用更抽象的术语来说,我需要“提取”位于给定区域中的整个子图。

非常感谢任何帮助!

4

1 回答 1

0

恐怕你不能通过 Cypher 做到这一点。Cypher 无法推断出您想对该查询使用数字值上下文(可能在未来版本的某些索引元信息中),并且您需要能够以您想要的方式查询 Lucene。REST 上最简单的方法可能是使用 Groovy,请参阅http://docs.neo4j.org/chunked/snapshot/gremlin-plugin.html#rest-api-send-an-arbitrary-groovy-上的自定义排序(相同问题)脚本---lucene排序

于 2012-04-17T08:39:03.917 回答