저는 neo4j의 기본 사항을 배우고 있으며 신용 카드 사기 https://linkurio.us/stolen-credit-cards-and-fraud-detection-with-neo4j으로 다음 예제를보고 있습니다. 쇼핑 모든 손상 사용자가 그러나많은 수의 노드에 대한 Neo4j 색인 생성
MATCH (victim:person)-[r:HAS_BOUGHT_AT]->(merchant)
WHERE r.status = “Disputed”
MATCH victim-[t:HAS_BOUGHT_AT]->(othermerchants)
WHERE t.status = “Undisputed” AND t.time < r.time
WITH victim, othermerchants, t ORDER BY t.time DESC
RETURN DISTINCT othermerchants.name as suspicious_store, count(DISTINCT t) as count, collect(DISTINCT victim.name) as victims
ORDER BY count DESC
곳에 매장을 찾아 사이퍼 쿼리 할 때 사용자의 수를 초기 쿼리 모두를 통과해야하므로,이 쿼리가 느려질 수 있습니다 (의 사용자의 수백만 가정 해 봅시다) 증가 사람이라고 표시된 노드. 트랜잭션 대신 노드에 속성을 할당하여 쿼리 속도를 높일 수 있습니까? 관계에서 "상태"속성을 제거하고 노드 (사용자가 아닌 판매자)에 추가하려고했습니다. 그러나 제약 조건이 WHERE victim.status="Disputed"
인 쿼리를 실행하면 쿼리가 아무 것도 반환하지 않습니다. 그래서, 제 경우에는 사람이 하나의 추가 속성 '상태'를 가지고 있습니다. 나는 많은 일을 잘못했다고 생각하지만, 의견에 감사 할 것입니다. 예를 들어
MATCH (victim:person)-[r:HAS_BOUGHT_AT]->(merchant)
WHERE victim.status = “Disputed”
은 분쟁중인 거래의 정확한 수를 반환합니다. 무의미한 거래의 수를 별도로 정하는 경우에도 마찬가지입니다. 그러나 병합되면 빈 세트가 생성됩니다.
내 접근 방식에서 실수를 한 경우 어떻게 많은 수의 노드에 대한 쿼리 속도를 높일 수 있습니까? (첫 번째 단계에서는 모든 노드를 통과하지 마십시오). 비슷한 속성을 가진 데이터 세트로 작업 할 예정이지만 약 1 억 명의 사용자가있을 것이므로 추가 속성에 대해 사용자를 인덱싱하고 싶습니다.
합니다. 그러나 사람과 판매자 사이의 예제 전환에는 시간 소인이 지정되고 시간 소인은 나중에 t.time과 r.time과 비교됩니다. 나는 시간을 어떻게 다루어야합니까? 조금 혼란 스럽습니까? – user201411
그래, 내 대답을 수정했습니다. – cybersam