2014-01-25 3 views
4

공간 플러그인이 설치된 최신 neo4j v2를 실행 중입니다. 지리적 인덱스에서 인덱싱해야하는 거의 모든 노드를 인덱싱 할 수있었습니다. 내가 고민하고있는 문제 중 하나는 노드가 이미 인덱싱되었는지 쉽게 확인하는 방법입니다.노드가 이미 neo4j-spatial 인덱스에서 인덱싱되었는지 확인하는 방법은 무엇입니까?

이 정보를 얻기 위해 어떤 REST 엔드 포인트도 찾을 수 없으며 cypher를 사용하여 쉽게 얻을 수 없습니다. 하지만 그것은 런타임이 용납 될 수 없다는 점을 제외하고는 원하는 결과를 제공하는 것으로 보이는이 쿼리를 시도했습니다.

MATCH (a)-[:RTREE_REFERENCE]->(b) where b.id=989898 return b;

지리 지수는 관계 RTREE_REFERENCE 참조하는 노드 ID의 속성 값에 색인 된 노드에 대한 참조를 저장소로

나는이 갈 수있는 방법이 될 수있다 생각.

이 쿼리는 14459 msneo4j-shell에서 실행됩니다.

데이터베이스가 커서 큰 것이 아니며 41000 nodes인데 전체 공간 인덱스에 추가하고 싶습니다.

이렇게하는 더 좋은 방법이 있어야합니다. 어떤 생각이나 포인터가 크게 감사하겠습니다.

답변

0

지금 당장 귀하의 요청은 네트워크의 모든 노드 (RTREE_REFERENCE 및 각각에 대한 ID 속성 확인)와 관련된 모든 노드를 통해 스 캐어링중인 것 같습니다.

왜 필요하지 않은 노드 ID에서 검색을 시작한 다음 그와 같은 모든 경로를 가져 오시겠습니까?

왜 내가 정의하는 노드를 반환해야하는지 이해가되지 않지만 어쨌든. 당신이 Neo4J을 실행하는 것처럼

나는 (아래 예에서 모두) 당신의 노드에 레이블을 추가하는 것이 좋습니다 :

START n=node(*) SET n:YOUR_LABEL_NAME 

다음 ID 속성으로 표시된 노드에 인덱스를 만들 수 있습니다.

MATCH (b:YOUR_LABEL_NAME{id:"989898"}), a-[:RTREE_REFERENCE]->b RETURN a,b; 

쿼리의 속도를 증가한다 : 당신이 그 일을하면

CREATE INDEX ON :YOUR_LABEL_NAME(id) 

,이 같은 쿼리를 실행합니다. 당신이 이미 그것을 알고 있다면 당신이 원래의 질문에 B를 쿼리 이유

당신이 당신의 데이터 노드의 ID를 알고 있기 때문에

+0

나도 그렇게 할 수 없다.어쩌면 제 질문으로는 충분하지 않을 수도 있습니다. 이 인덱스는 neo4j-spatial 플러그인에 의해 생성 된 것이므로 색인을 생성하는 노드를 참조하는 노드에 레이블을 지정할 수 없습니다. 적어도 내가 아는 한. 전체적으로 많은 것을 샅샅이 뒤지는 것이 길은 아니라는 것을 알기 때문에 이것이 더 좋은 방법이 있는지를 묻고있는 이유입니다. –

+0

@deemeetree가 만드는 주된 요점은 노드가 이미 인덱싱 된 경우에만 수신 RTREE_REFERENCE를 갖게된다는 것입니다. 귀하의 원래 질문에서 나는 당신이 노드와 함께 일하고 있다고 가정하고 그것이 색인 생성되었는지 알아야합니다. 들어오는 관계를 확인하기 전에 코드가 먼저 노드를 다시 검색하는 것 같습니다. 데미 리 제안은 그것에 대한 색인을 사용하는 것입니다. 그럴 수는 있지만 노드의 ID를 알고 있기 때문에 색인이 필요하지 않습니다. 좀 더 간단한 제안을 원하면 별도의 답변을 참조하십시오. –

1

, 당신이 직접 액세스 할 수 있습니다 ... 그 작동하는지 알려줘하고 설명하십시오 인덱스없이 사이퍼, 단지 수신 RTREE_REFERENCE 관계 확인 :

START n=node(989898) MATCH (p)-[r:RTREE_REFERENCE]->(n) RETURN r; 

측 노드로하여 사이퍼는 그 구 'n.id = 989,898'그러나이 경우, 내부 노드 ID를 가지고 n.id가 키 'id'가있는 속성을 찾을 것이기 때문에 작동하지 않습니다. 내부 노드 ID는 'id (n)'을 사용하십시오.

'id'가 실제로 노드 속성이고 내부 ID가 아닌 경우이 속성에 대한 색인을 사용하여 @deemeetree 제안이 더 좋습니다.

+0

neo4j-spatial 인덱스에서 인덱싱 된 노드에는 직접 연결이 없기 때문에 여전히 작동하지 않습니다. 따라서이 경우 노드 (989898)에는 직접 관계 r : RTREE_REFERECE가 없습니다. 노드가 공간 인덱스에 추가되면 인덱싱 할 노드를 다시 가리키는 "id"속성을 사용하여 새 노드가 만들어집니다. 현재 나 사이퍼와 함께이 수표를 발행하는 좋은 방법이 존재하지 않는 것 같습니다. –

관련 문제