我在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三角剖分。用更抽象的术语来说,我需要“提取”放置在给定区域中的整个子图。
非常感谢任何帮助!
答案 0 :(得分:0)
恐怕你不能通过Cypher做到这一点。 Cypher无法推断出您希望为此查询使用数值上下文(可能在将来的版本中可能存在一些索引元信息),并且您需要能够以您希望的方式查询Lucene。通过REST的最简单方法可能是使用Groovy,请参阅http://docs.neo4j.org/chunked/snapshot/gremlin-plugin.html#rest-api-send-an-arbitrary-groovy-script---lucene-sorting上的自定义排序(同一问题)