2014-01-22 3 views
0

Neo4j 초보자는 여기에 있지만 쿼리가 더 야심 차고 있습니다. 나는 제품 N을 소유하고 있지 않은 고객 C2 세트를 검색하려고 시도하지만 제품 N을 소유 한 고객 C 세트가 소유하고있는 제품 세트 N2에서 발견 된 제품을 소유합니다. 쿼리는 정렬 이 그것입니다 생각 (SKU 123456에 의해 확인 된 제품 제공) :영업 상관 관계를 기반으로 제품을 구매할 가능성이있는 고객 집합을 식별합니다.

Start 
N=node:node_auto_index(sku="123456") 
match 
    (C)-[:owns]->(N), 
    (C)-[:owns]->(N2), 
    (book)-[:owned_by]->(C2) 
    WHERE NOT((C2)-[:owns]->(N)) 
return C2.name 
limit 10 

나는 심지어 제정신 방법으로 이것에 대해 건가? 이상한 점은 결과 집합이 제한되어있을 때 즉시 반환된다는 것입니다 (예에서는 10 개). 그러나 제한을 제거하면 웹 콘솔에 "알 수없는 오류"오류가 표시됩니다 (로그를 보면 아무 것도 나타나지 않습니다.).

통찰력을 얻었습니다.

편집

마이클 기아 확실히 나는 그의 대답은 그러나 문제가 오타로 인해 아니었다 동의거야 그래서 도움; 필자는 설명이 약간 복잡하여 두려웠 기 때문에 문제 설명에서 표기법과 일치하는 대체 구문을 작성하는 동안 소개했습니다. 그러나 해결책은 다른 사람들을 따라갈 수 있으므로 여기서 설명 할 것입니다. 나는 Cypher 쿼리를 프로토 타입하기 위해 Neo4j 웹 브라우저를 사용하고 있었지만,이 방법은 상당히 효과적 이었지만 어떤 이유로 든 1,000 개가 넘는 레코드가 포함 된 응답을 허용하지 않았습니다. 이것이 제한된 쿼리가 응답을 즉시 반환하는 이유입니다. 이후에 쿼리를 1,000 개가 넘는 행으로 제한했을 때 응답이 너무 커서 (1,000 개 이상의 행)라고 들었습니다. 내가 한도를 모두 없애면 "알 수없는 오류"라는 오류가 발생합니다. 브라우저 관리자가 1,000 행 이상의 응답을 반환 할 수 없다는 것을 혼란스러운 방식으로 표시하는 것입니다. 제한이 사용되지 않을 때 다르게보고되는 이유는 확실하지 않습니다.

Neo4j 셸에서 쿼리를 실행하여이 결론을 얻었습니다.이 쿼리는 행복하고 즉각적으로 1,000 개가 넘는 행을 반환했습니다. 희망이 사람을 도움이됩니다.

답변

2

검색어에 오타가있을 수 있습니다. 대신 book이 표시되면 더 나은 이름을 선택하게됩니다. 2.0을 사용하면 레이블을 사용할 수 있습니다.

match (product:Product {sku:"123456"})<-[:OWNS]-(peer:Customer) 
     -[:OWNS]->(other:Product)<-[:OWNS]-(target:Customer) 
WHERE NOT((target)-[:owns]->(product)) 
return target.name 
limit 10 

Neo4j 2.0

에 대한

Start 
N=node:node_auto_index(sku="123456") 
match 
    (C)-[:owns]->(N), 
    (C)-[:owns]->(N2), 
    (N2)-[:owns]->(C2) 
    WHERE NOT((C2)-[:owns]->(N)) 
return C2.name 
limit 10 

아마도 당신은 당신의 데이터 모델의 GraphGist 및 추가 논의에 대한 몇 가지 예를 들어 쿼리를 만들 수 있습니다.

관련 문제