Neo4j에서 평면에있는 임의의 점을 나타내는 그래프가 있는데, 각 노드는 좌표가 속성으로 저장되어 있습니다 (x 및 y, 값 유형은 double
).Neo4j 및 Lucene 다중 키 쿼리 (또는 : Cypher를 사용해야합니까?)
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 삼각 측량을 나타내는 것입니다. 좀 더 추상적 인 용어로, 주어진 영역에있는 전체 서브 그래프를 "추출"해야합니다.
도움이 정말 감사합니다!
좋아, 왜 lucene 쿼리가 작동하지 않습니까? – Metz