2016-10-24 1 views
0

안녕하세요으로 그룹을 찾아 사용 Neo4J의 관계를 계산 3.03 : -내가 neo4j에서 라벨의 2 개 세트가 사이퍼

INTERACTIONS 

uidpid 100000060085836_170782808933_10154454374183934 
name Dean Hohaia 
postid 170782808933_10154454374183934 
pageid 170782808933 
userid 100000060085836 

POSTS 

shares  0 
comments 0 
postid  100129044360_100138063361365 
pageid  100129044360 
type  link 
createdtime 2010-03-30 00:43:23 
pagename Study in New Zealand 
likes  4 

나는 관계가 좋아이 만들어졌습니다 좋아라고 가지고있다 -

MATCH (i:interactions),(p:posts) 
WHERE i.userid = p.userid 
CREATE (i)-[:likes]->(p) 

는 다음과 같이 : 기본적으로 상호 작용으로

uidpid 613637235481924_125251397514429_1000501533322740 
name Toth Mariann 
postid 125251397514429_1000501533322740 
pageid 125251397514429 
userid 613637235481924 

같은. 페이지 이름에 의해 게시물의 각 페이지 이름에 대한

, 사용자 ID 상호 작용의 쇼 수 : - - : 본질적으로

Source Pagename Matched Pagename Userids count # 
Air New Zealand Rialto Channel  12494 
Air New Zealand RNZ    2979 
Air New Zealand SKY TV    4651 

- 각 페이지 이름에 대한

나는 표시하는 쿼리를 만들 수있는 방법을 찾을 필요 게시물에서 각 사용자가 참여한 다른 모든 페이지의 수를 표시합니다.

이 작업을 수행하려면 다른 관계를 만들어야합니까?

다음은 우리가 postid에 따라 상호 작용과 게시물을 연결 언급 한 바와 같이, CSV의 https://www.wetransfer.com/downloads/37e89c65f029344a2205ca717f04b6fe20161024051807/0d4ab3

답변

1

첫째로 내가 사용하고 정확한, 예를 들어 데이터입니다 (1).

MATCH (i:interactions), (p:posts) 
WHERE i.postid = p.postid 
CREATE (i)-[:likes]->(p) 

그런 다음 우리는 각 사용자 (2)에 대한 노드를 만들 :

MATCH (i:interactions) 
WITH DISTINCT i.userid AS userid 
CREATE (u:user {userid: userid}) 

그리고 상호 작용에 연결 (3) :

MATCH (u:user), (i:interactions) 
WHERE u.userid = i.userid 
CREATE (u)-[:performed]->(i) 

그것은이 두 CREATE을 수행하는 것이 가능 운영 (2와 3)은 하나의 MERGE으로 이루어져 있지만 성능은 훨씬 나빠진 것 같습니다. 이유는 확실하지 않습니다.

MATCH (i:interactions) 
MERGE (u:users {userid: i.userid})-[:performed]->(i) 

likesperformed 관계를 생성하는 데, 우리는 이제이 (4)와 같은 쿼리를 공식화 할 수 있습니다

MATCH (source:posts)<-[:likes]-(:interactions)<-[:performed]-(:users)-[:performed]->(:interactions)-[:likes]->(matched:posts) 
RETURN source.pagename, matched.pagename, COUNT(matched) 
LIMIT 10 

경고 :이 내 노트북에서 실행하기 위해 두 분이 걸렸다 (후반 2011 쿼드 코어 i7 CPU + SSD).

쿼리는 게시물 (source)에서 시작하여 상호 작용을 수행 한 각 사용자에게 likesperformed 에지를 탐색합니다. 그런 다음 해당 사용자의 다른 상호 작용 (다시 말하면 likesperformed 가장자리를 통해)으로 이동하며 게시물을 나타내는 노드 (matched)로 끝납니다. matched 노드의 수는 COUNT method으로 집계되고 페이지 이름 속성과 함께 반환됩니다.

관련 제안 사항 : 레이블 이름은 대문자로 시작해야하며 단명이어야합니다 (예 : Post, InteractionUser).

+0

안녕하세요 @szarnyasg - 여기에 데이터 링크가 있습니다. 예제는 작동하지만 내 데이터는 작동하지 않습니다. 시도해 줘서 고마워요 - 도움을 크게 주시면 감사하겠습니다 https://www.wetransfer.com/downloads/37e89c65f029344a2205ca717f04b6fe20161024051807/0d4ab3 –

+0

나는이 데이터를 빈 데이터베이스로 가져올 수 있었다. (조심해 - 그것은 'graph.db'에로드된다.) 'bin/neo4j-import - data/databases/graph.db --id-type 문자열 - 노드 : 상호 작용 import/neo_ilab_people.csv - 노드 : posts 가져 오기/neo_posts.csv'. 그러나,'head -n 1 import/neo_posts.csv'는''pageid ","pagename ","postid ","type ","createdtime ","likes "," 의견 ","공유 ". 이것은'likes' 관계를 생성하는 쿼리에 의해 사용됩니다. –

+0

감사합니다 @szarnyasg, 게시물과 상호 작용 간의 관계는 postid를 통해 발생합니다. 그래서 내가 찾고있는 (linkedin 메시지로 보낸) 쿼리는 페이지 (Air New Zealand)의 모든 사용자 ID와이 사용자 ID가 종사하는 다른 모든 페이지의 목록을 얻습니다. –

관련 문제