diy graph search - max de marzi @ graphconnect boston + chicago 2013

58
Innovate. Share. Connect. Chicago June 12-13 DIY Graph Search Max De Marzi, Neo Technology Tuesday, June 18, 13

Upload: neo4j-the-fastest-and-most-scalable-native-graph-database

Post on 17-May-2015

2.012 views

Category:

Technology


0 download

DESCRIPTION

Facebook Graph Search has given the Graph Database community a simpler way to explain what it is we do and why it matters. I wanted to drive the point home by building a proof of concept of how you could do this with Neo4j.

TRANSCRIPT

Page 1: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

Innovate. Share. Connect.Chicago June 12-13

DIY Graph SearchMax De Marzi, Neo Technology

Tuesday, June 18, 13

Page 2: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

Can I Haz?Tuesday, June 18, 13

Page 3: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

NopeTuesday, June 18, 13

Page 4: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

#9,998,383,750,000

Tuesday, June 18, 13

Page 5: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

Can I make my own?

Tuesday, June 18, 13

Page 6: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

MaybeTuesday, June 18, 13

Page 7: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

What do I know about

NLP?Tuesday, June 18, 13

Page 8: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

NothingTuesday, June 18, 13

Page 9: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

What do I know?

Tuesday, June 18, 13

Page 10: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

Tuesday, June 18, 13

Page 11: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

andTuesday, June 18, 13

Page 12: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

CypherTuesday, June 18, 13

Page 13: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

I can query a graph

Tuesday, June 18, 13

Page 14: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

How?Tuesday, June 18, 13

Page 15: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

����������������� ���������������

Matching PatternsTuesday, June 18, 13

Page 16: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

ASCII Art

Tuesday, June 18, 13

Page 17: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

() --> ()

ASCII Art

Tuesday, June 18, 13

Page 18: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

Named Nodes

Tuesday, June 18, 13

Page 19: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

(A) --> (B)

Named Nodes

Tuesday, June 18, 13

Page 20: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

LOVES

Typed Relationships

Tuesday, June 18, 13

Page 21: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

A -[:LOVES]-> B

LOVES

Typed Relationships

Tuesday, June 18, 13

Page 22: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

Describing a Path

Tuesday, June 18, 13

Page 23: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

A --> B --> C

Describing a Path

Tuesday, June 18, 13

Page 24: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

A

B C

Multiple Paths

Tuesday, June 18, 13

Page 25: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

A --> B --> C, A --> C

A

B C

Multiple Paths

Tuesday, June 18, 13

Page 26: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

A --> B --> C, A --> C

A

B C

A --> B --> C <-- A

Multiple Paths

Tuesday, June 18, 13

Page 27: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

The START Clause

Tuesday, June 18, 13

Page 28: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

The START Clause

START me=node(1)RETURN me

Tuesday, June 18, 13

Page 29: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

with an Index

Tuesday, June 18, 13

Page 30: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

with an Index

START me=node:Users(name=‘Max’)RETURN me

Tuesday, June 18, 13

Page 31: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

The MATCH Clause

Tuesday, June 18, 13

Page 32: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

The MATCH Clause

START me=node:Users(name=‘Max’)MATCH me -[:friends]-> peopleRETURN people

Tuesday, June 18, 13

Page 33: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

My friends who like cheese

Tuesday, June 18, 13

Page 34: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

My friends who like cheese

START me=node:Users(name=‘Max’) thing=node:Things(name=‘Cheese’)MATCH me -[:friends]-> people -[:like]-> thingRETURN people

Tuesday, June 18, 13

Page 35: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

My friends who like cheese

Tuesday, June 18, 13

Page 36: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

My friends who like cheese

START me=node:Users(name=‘Max’) thing=node:Things(name=‘Cheese’)MATCH me -[:friends]-> people, people -[:like]-> thingRETURN people

Tuesday, June 18, 13

Page 37: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

My friends who like ?

Tuesday, June 18, 13

Page 38: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

My friends who like ?START me=node({me}), thing=node:Things({thing})MATCH me -[:friends]-> people, people -[:like]-> thingRETURN people

Params :{“me”: 1, “thing”: “name: cheese”}

Tuesday, June 18, 13

Page 39: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

My friends who like ? and ?

Tuesday, June 18, 13

Page 40: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

My friends who like ? and ?

START me=node({me}), thing1=node:Things({thing1}), thing2=node:Things({thing2})MATCH me -[:friends]-> people, people -[:like]-> thing1, people -[:like]-> thing2RETURN peopleParams :{“me”: 1, “thing1”: “name: cheese”, “thing2”: “name: wine”}

Tuesday, June 18, 13

Page 41: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

People who like ? and ?

Tuesday, June 18, 13

Page 42: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

People who like ? and ?START thing1=node:Things({thing1}), thing2=node:Things({thing2})MATCH people -[:like]-> thing1, people -[:like]-> thing2RETURN peopleParams :{“thing1”: “name: cheese”, “thing2”: “name: wine”}

Tuesday, June 18, 13

Page 43: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

I need to build a Cypher Query

Tuesday, June 18, 13

Page 44: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

SEMR

✦ Gateway drug to NLP

✦ 4 years old

✦ Didn’t work on my Mac

✦ Pointed me to Treetop

Tuesday, June 18, 13

Page 45: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

Treetop✦ Create a Grammar by

making some Rules

✦ Turn expression into Syntax Tree

✦ Build custom Syntax Nodes

✦ Prune the tree

✦ to_cypher

Tuesday, June 18, 13

Page 46: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

Friends Rule

Tuesday, June 18, 13

Page 47: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

Friends Rule

rule friends “friends” <Friends>end

Tuesday, June 18, 13

Page 48: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

friends to_cypher

Tuesday, June 18, 13

Page 49: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

friends to_cypher class Friends < Treetop::Runtime::SyntaxNode

def to_cypher

return {:start => "me = node({me})",

:match => "me -[:friends]-> people",

:return => "people",

:params => {"me" => nil }}

end

end

Tuesday, June 18, 13

Page 50: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

Likes Rule

Tuesday, June 18, 13

Page 51: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

Likes Rule

rule likes "who like" <Likes>end

Tuesday, June 18, 13

Page 52: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

likes to_cypher

Tuesday, June 18, 13

Page 53: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

likes to_cypher class Likes < Treetop::Runtime::SyntaxNode

def to_cypher

return {:match => "people -[:likes]-> thing"}

end

end

Tuesday, June 18, 13

Page 54: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

Thing Rule

Tuesday, June 18, 13

Page 55: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

Thing Rule

rule thing [a-zA-Z0-9]+ <Thing>end

Tuesday, June 18, 13

Page 56: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

thing to_cypher

Tuesday, June 18, 13

Page 57: DIY Graph Search - Max De Marzi @ GraphConnect Boston + Chicago 2013

thing to_cypherclass Thing < Treetop::Runtime::SyntaxNode

def to_cypher

return {:start => "thing = node:things({thing})",

:params => {"thing" => "name: " + self.text_value } }

end

end

Tuesday, June 18, 13