我在 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 三角剖分。用更抽象的术语来说,我需要“提取”位于给定区域中的整个子图。
非常感谢任何帮助!