4+1 fajta csúcs van. Mindegyik csúcshoz tartoznak property-k, ezek kulcs-érték párokban leírt tulajdonságok. A csúcstípusok a hozzájuk tartozó property-kkel: tweet id: tweet id short: a hashtag-ek és a mention-ök és a linkek ki vannak szedve text: a tweet link: hivatkozás a tweet-re date: longként? (pl. 1319555680) url url: tweet-en belüli link tag name: (pl. "springone") user twid: azonosító (pl. "mikewitters") category: ez egy segéd csúcs a felhasználók és a tag-ek elérésére. A feladatokban nem kell használni. category: (pl.: "TAGS", "USERS") A csúcsok különböző típusú élekkel vannak összekötve. Az alábbiakban kigyűjtöttem, hogy az egyes éltípusok milyen csúcsok között mennek. Az élek irányítottak. tweet "LINKS" url user "TWEETED" tweet user "KNOWS" user tweet "MENTIONS" user user "USED" tag tweet "TAGGED" tag Az alábbiakat szerepelnek az adatbázisban, de a feladatok során nem szükségesek category "TAGS" tag category "USER" user node0 "USERS" node2 Feladatok megoldással: jeff=node(10) star=node(116) 1. Milyen hashtageket használt jeff? START jeff=node(10) MATCH jeff-[:USED]->tag RETURN tag.name 2. Hányat tweetelt jeff, ha jeff=node(10)? START jeff=node(10) MATCH jeff-[:TWEETED]->tweet RETURN count(tweet) 3. Mikor tweetelt jeff először? START jeff=node(10) MATCH jeff-[:TWEETED]->tweet RETURN min(tweet.date) 4. Mely tweetekben szerepel a "neo4j" hashtag, jeff tweetjei közül? START jeff=node(10) MATCH jeff-[:TWEETED]->tweet-[:TAGGED]->tag WHERE tag.name="neo4j" RETURN count(tweet) 5. Milyen tageket használt jeff és star közösen? START jeff=node(10), star=node(116) MATCH jeff-[:TWEETED]->tweet-[:TAGGED]->tag<-[:TAGGED]-tweet2<-[:TWEETED]-star RETURN DISTINCT(tag.name) 6.a. Kik említették egymást a tweetjeikben START user=node(*) MATCH user-[:TWEETED]->tweet-[:MENTIONS]->other-[:TWEETED]->t-[:MENTIONS]->user RETURN DISTINCT user.twid, other.twid 6.b. Páronként csak egyszer írjuk ki! START user=node(*) MATCH user-[:TWEETED]->tweet-[:MENTIONS]->other-[:TWEETED]->t-[:MENTIONS]->user WHERE user.twid<=other.twid RETURN DISTINCT user.twid, other.twid 6.c. Csak azokat írjuk ki, akik nem ismerik egymást. START user=node(*) MATCH user-[:TWEETED]->tweet-[:MENTIONS]->other-[:TWEETED]->t-[:MENTIONS]->user WHERE not(user-[:KNOWS]->other) RETURN DISTINCT user.twid, other.twid 7. Adjuk meg a 10 legtöbbször előforduló hashtaget az előfordulások számával! START tag=node(*) MATCH tweet-[:TAGGED]->tag WHERE has(tag.name) RETURN tag.name, count(tweet) ORDER BY count(tweet) desc LIMIT 10 8.a. Írjuk ki a jeff által küldött tweetek szövegét, a benne szereplő hashtageket tweetenként csoportosítva! START jeff=node(10) MATCH jeff-[:TWEETED]->tweet-[:TAGGED]->tag WITH tweet,collect(tag.name) as tags RETURN tweet.text, tags 8.b. Csak azok a tweetek jelenjenek meg, melyekben legalább két hashtag van! START jeff=node(10) MATCH jeff-[:TWEETED]->tweet-[:TAGGED]->tag WITH tweet,collect(tag.name) as tags WHERE length(tags)>1 RETURN tweet.text, tags 9.a. Melyik a legrövidebb út jeff és star között a KNOWS típusú élek mentén? START jeff=node(10), star=node(116) MATCH p = shortestPath(jeff-[:KNOWS*]->star) RETURN p 9.b. Hány csúcsból áll? START jeff=node(10), star=node(116) MATCH p = shortestPath(jeff-[:KNOWS*]->star) RETURN length(p) 10.a. Hány 5 vagy 6 hosszú út van jeff és star között a KNOWS típusú élek mentén? START jeff=node(10), star=node(116) MATCH p = (jeff-[:KNOWS*5..6]->star) RETURN count(p) 10.b. Ezek közül melyik utakon szerepel jeff csak kezdőcsúcsként? START jeff=node(10), star=node(116) MATCH p = (jeff-[:KNOWS*5..6]->star) WHERE not(jeff IN tail(nodes(p))) RETURN p 10.c. Ezek közül melyik út körmentes? START jeff=node(10), star=node(116) MATCH p = (jeff-[:KNOWS*5..6]->star) WHERE ALL(n in nodes(p) where SINGLE(m in nodes(p) where n=m)) RETURN p