Exploring cypher with graph gists

Preview:

DESCRIPTION

Talk at the Great Indian Developer Summit(http://www.developermarch.com/developersummit/conference.html) 2014, Bangalore.

Citation preview

Exploring the Cypher Query Language through GraphGists

Luanne Misquitta @luannem

Our Path

Neo4j Cypher ExamplesGraphGists

What if…

Credit: Shantaram Waingankar

Or

Credit: Luanne M.

Or

Credit: Florent Biville

Or

6Credit: Luanne M.

All you need is…

According to The Beatles

But that’s not why you’re here

What you really need is… a Graph

What is Neo4j?

• A Graph Database • A labelled property graph • Nodes with properties and labels (both optional) • Directed and named relationships with properties

(optional) • ACID • Schema free • Scalable: Billions of nodes and relationships • Fast: More than 2 million traversals per second • Suited for highly connected and complex data

What is Neo4j

name:Neo

name: Agent Smith

name: Cypher

name: Morpheus

name:TrinityLoves

KnowsKnows {since: 1999}

Knows

Knows

CrewCrew

Crew

CrewMatrixMatrix

Cypher

• Declarative graph query language • Based on English prose and neat

iconography • Focuses on

• What to retrieve from the graph and not how to retrieve it

• Pattern matching • Your domain instead of database access

• Humane query language, suitable for developers and operations professionals

Patterns and picturesNeo Trinity

LovesNeo loves Trinity

(Neo)-[:LOVES]->(Trinity)

Cypher Agent Smith

KnowsCypher knows Agent Smith

(Cypher)-[:KNOWS]->(Agent Smith)

Pattern matching

14

MATCH (me:User {name:’Luanne’})-[f:FRIEND_OF]->(friend)-[:LISTENS_TO]->(artist)!WHERE NOT (me-[:LISTENS_TO]->(artist) AND f.similarity>0.7!RETURN artist

Luanne

The Beatles

F1

Aerosmith

F2

Pink Floyd

FRIEND_OF {similarity=0.9}

FRIEND_OF {similarity=0.4}

LISTENS_TO

LISTENS_TO

LISTENS_TOLISTENS_TO

Example Query Structure

15

MATCH (u:User)-[:LISTENS_TO]->(a:Artist) !WHERE a.genre=“Rock” !WITH u, a, count(a) as artistCount !MATCH (a)-[r:PLAYING_IN]->(city) !WHERE r.ticketsAvailable=true !RETURN u,a,city.name as cityName !ORDER BY cityName LIMIT 5

MATCH

• Allows you to specify patterns that Cypher will search for in the graph

16

Match

17

MATCH (u:User)-[:LISTENS_TO]->(a:Artist) !WHERE a.genre=“Rock” !WITH u, a, count(a) as artistCount !MATCH (a)-[r:PLAYING_IN]->(city) !WHERE r.ticketsAvailable=true !RETURN u,a,city.name as cityName !ORDER BY cityName LIMIT 5

Where

• Filters the results • Adds constraints to the pattern described in

MATCH

18

Where

19

MATCH (u:User)-[:LISTENS_TO]->(a:Artist) !WHERE a.genre=“Rock” !WITH u, a, count(a) as artistCount !MATCH (a)-[r:PLAYING_IN]->(city) !WHERE r.ticketsAvailable=true !RETURN u,a,city.name as cityName !ORDER BY cityName LIMIT 5

Return

• Returns results

20

Return

21

MATCH (u:User)-[:LISTENS_TO]->(a:Artist) !WHERE a.genre=“Rock” !WITH u, a, count(a) as artistCount !MATCH (a)-[r:PLAYING_IN]->(city) !WHERE r.ticketsAvailable=true !RETURN u,a,city.name as cityName !ORDER BY cityName LIMIT 5

Order By, Limit

• Sort the output • Return a subset

22

Order By, Limit

23

MATCH (u:User)-[:LISTENS_TO]->(a:Artist) !WHERE a.genre=“Rock” !WITH u, a, count(a) as artistCount !MATCH (a)-[r:PLAYING_IN]->(city) !WHERE r.ticketsAvailable=true !RETURN u,a,city.name as cityName !ORDER BY cityName LIMIT 5

WITH

• Manipulate the result sequence before it is passed on to the following query parts.

• The manipulations can be of the shape and/or number of entries in the result set.

• Combines queries

24

With

25

MATCH (u:User)-[:LISTENS_TO]->(a:Artist) !WHERE a.genre=“Rock” !WITH u, a, count(a) as artistCount !MATCH (a)-[r:PLAYING_IN]->(city) !WHERE r.ticketsAvailable=true !RETURN u,a,city.name as cityName !ORDER BY cityName LIMIT 5

GraphGists

What’s a Gist?

27

• A simple way to share snippets of code or data

• Automatically versioned, forkable, usable from Git

• Nicely rendered and presented

Okay, why?

• How do you share your graph model? • Whiteboard? • Document? • How do you demonstrate queries? • Need a live database? • Modelling is incremental

28

What’s a GraphGist?

29

• An AsciiDoc file with: • A graph domain model • Descriptive text and pictures • Example queries against the model • Interactive and executable Cypher queries • A Neo4j console for further exploration

• Nicely rendered and presented

GraphGist demos• Trek and mountaineering routing

http://gist.neo4j.org/?09520d20fbe707951e1b @shantaramw

• Organization learninghttp://gist.neo4j.org/?8021754 @luannem

• Doctor Finder http://gist.neo4j.org/?8748719 @fbiville

• Bombay Railway Routes http://gist.neo4j.org/?8159102 @luannem 30

Resources

32

Neo4j http://www.neo4j.org/ !Explore and create your own GraphGist http://www.neo4j.org/learn/graphgist !Online Training http://www.neo4j.org/learn/online_course

Spreading Graph Love

Recommended