2014-12-03 5 views
1

최적화 이미 가져온 노드를 DB에있는 고객 노드에 연결하고 싶습니다. 아이디어는 Label TICKET으로 모든 가져온 노드를 검색하고 결과 세트를 실행하여 관계를 작성하는 것이 었습니다.neo4j CSV LOAD를 통해 데이터를 가져온 후 관계 확인 (쿼리)

가 ON 인덱스 있습니다
# Find nodes without relationship for label Ticket 
MATCH (t:Ticket), (c:Customer) 
WHERE NOT (t)--(c) 
RETURN t.number as ticket_number, t.type as ticket_type,t.sid as ticket_sid 

# Run through the resultset and execute for each found node 
MATCH (t:Ticket { number: "xxx" }), (c:Customer {code: "xxx"})  
MERGE (t)-[:IS_TICKET_OF]->(c); 

: (수) ON 티켓을 (코드)

을 처리 할 수있는이 방법은 고객입니다 여기

내가 첫 번째 방법을 마련 코드입니다 매우 느리고 CSV 파일을 실행하는 데 몇 분이 걸렸습니다. 쿼리를 최적화하는 방법이 있거나 누락 된 관계를 가장 먼저 찾고 루프를 실행하는 방법을 찾기 쉽기를 바랍니다.

csv로로드은 : CSV 가져 오기에 이미 관계를 만들 어쩌면 그 또한 좋은

LOAD CSV FROM "file:c:..." AS csvLine 
MERGE (t:Ticket { number: csvLine[0]}) 

-

MATCH (c:Customer {code:"xxx"}) 
MERGE (t) - [:IS_TICKET_OF]-> (c) 

하지만 쿼리에 알아낼 필요가 같은 아마 뭔가를 필드에서 코드를 추출하는 방법은 CSV 가져 오기에서 "aaa/vvv/bbb/1234"와 같으며 고객 노드에 ID로 저장되므로 위의 일치 항목에 대해 aaa 만 필요합니다.

모든 힌트를 매우 높이 평가합니다.

감사합니다.

답변

1

이 쿼리는 효과가 있습니까?

num에 입력 문자열의 일부를 저장하고 해당 번호의 티켓이 있는지 확인한 다음 일치하는 고객 (해당 고객이있는 경우)과의 관계가 있는지 확인합니다.

LOAD CSV FROM "file:c:..." AS csvLine 
WITH SPLIT(csvLine[0], '/')[0] AS num 
MERGE (t:Ticket {number: num}) 
WITH num, t 
OPTIONAL MATCH (c:Customer {code: num}) 
MERGE (t)-[:IS_TICKET_OF]->(c);