2017-10-16 4 views
0

우리는 Neo4j의 POC에 있습니다. 유스 케이스는 자격을 갖춘 판매자에게 기회를 가져오고 이미 조치를 취하지 않은 대시 보드입니다. 현재 세 가지 기준이 있으며 두 가지를 더 추가하려고합니다. 해당 SQL은 3 페이지이므로 우리는 다음 기준을 추가 할 때 더 나은 방법을 찾고 있습니다. Neo에서는 2 개의 노드 경로가 SQL에서 곰이됩니다. 아래 쿼리를 실행하면 SQL보다 다른 양의 행이 반환됩니다. 반환 된 구매는 3 경로 모두 끝나고 4 단계가 아니어야합니다. 내가 잘못한 곳을 지적 할 수 있기를 바랍니다. 이 쿼리가 좋은 경우 데이터 문제가 있습니다. 그것은 여기에, 도움이 데이터 모델의 경우Neo4j에서 다른 경로가 아닌 모든 경로의 끝에있는 노드 찾기

//oportunities dashboard 
MATCH (s:SellerRep)-[:SELLS]->(subCat:ProductSubCategory)<-[:IS_FOR_SUBCAT]-(b:Buy) 
MATCH (s:SellerRep)-[:SELLS_FOR]->(o:SellerOrg)-[:HAS_SELLER_TYPE]->(st:SellerType)<-[:IS_FOR_ST]-(b:Buy) 
MATCH (s:SellerRep)-[:SELLS_FOR]->(o:SellerOrg)-[:IS_IN_SC]->(sc:SellerCommunity)<-[:IS_FOR_SC]-(b:Buy) 
WHERE NOT (s:SellerRep)-[:PLACED_BID]->(:Bid)-[:IS_FOR_BUY]->(b:Buy) 
AND s.sellerRepId = 217722 and b.currBuyStatus = 'Open' 
RETURN b.buyNumber, b.buyDesc, st.sellerType, sc.communtiyName, subCat.subCategoryName+' - '+subCat.desc as sub_cat 

: 어떤 도움 POC Data model

덕분에 여기

는 쿼리입니다.

답변

1

WHERE 절은 바로 앞의 MATCH 절만 필터링합니다.

당신은 처음 2 개 MATCH 조항이 특정 SellerRep 또는 Buy 노드에 바인딩되지 않습니다, 세 번째 MATCH 절 후 WHERE 절을 배치, 당신이 의도 한 것보다, 따라서 더 ProductSubCategorySellerType 노드 초래되기 때문에.

다음 쿼리는 의도로 아마 가까운 :

MATCH (s:SellerRep)-[:SELLS]->(subCat:ProductSubCategory)<-[:IS_FOR_SUBCAT]-(b:Buy) 
WHERE s.sellerRepId = 217722 AND b.currBuyStatus = 'Open' AND NOT (s:SellerRep)-[:PLACED_BID]->(:Bid)-[:IS_FOR_BUY]->(b:Buy) 
MATCH (s)-[:SELLS_FOR]->(o:SellerOrg)-[:HAS_SELLER_TYPE]->(st:SellerType)<-[:IS_FOR_ST]-(b) 
MATCH (o)-[:IS_IN_SC]->(sc:SellerCommunity)<-[:IS_FOR_SC]-(b) 
RETURN b.buyNumber, b.buyDesc, st.sellerType, sc.communtiyName, subCat.subCategoryName+' - '+subCat.desc as sub_cat 

주 : 두 번째와 세 번째 MATCH 절을 모두 (s:SellerRep)-[:SELLS_FOR]->(o:SellerOrg) 시작했다. 제 3의 MATCH 절이 단지 (o)으로 시작되도록함으로써 동일한 논리를 단순화했습니다. 다행히 실제로 두 절 모두 동일한 SellerOrg 노드를 참조하게 만들려고합니다.