Skip to content

Instantly share code, notes, and snippets.

@dkuppitz
Created July 24, 2015 16:44
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dkuppitz/79e0b009f0c9ae87db5a to your computer and use it in GitHub Desktop.
Save dkuppitz/79e0b009f0c9ae87db5a to your computer and use it in GitHub Desktop.
graph = TinkerGraph.open()
graph.createIndex("name", Vertex.class)
g = graph.traversal()
// Query 1
person1 = graph.addVertex(label, 'person', 'name', 'Michael Sherman')
person2 = graph.addVertex(label, 'person', 'name', 'Zoltan Varju')
person3 = graph.addVertex(label, 'person', 'name', 'Peter Neubauer')
person4 = graph.addVertex(label, 'person', 'name', 'Grace Andrews')
person5 = graph.addVertex(label, 'person', 'name', 'Michael Hunger')
person6 = graph.addVertex(label, 'person', 'name', 'Toby Craig')
person7 = graph.addVertex(label, 'person', 'name', 'Huston Hedinger')
person8 = graph.addVertex(label, 'person', 'name', 'Nigel Small')
person9 = graph.addVertex(label, 'person', 'name', 'Wes Freeman')
person10 = graph.addVertex(label, 'person', 'name', 'Luanne Misquitta')
person11 = graph.addVertex(label, 'person', 'name', 'shiv swami')
person12 = graph.addVertex(label, 'person', 'name', 'Pernilla Lindh')
person13 = graph.addVertex(label, 'person', 'name', 'Max De Marzi')
person14 = graph.addVertex(label, 'person', 'name', 'Chris Leishman')
person15 = graph.addVertex(label, 'person', 'name', 'Kenny Bastani')
movie1 = graph.addVertex(label, 'movie', 'name', 'Titanic')
movie2 = graph.addVertex(label, 'movie', 'name', 'Forrest Gump')
movie3 = graph.addVertex(label, 'movie', 'name', 'Mean Girls')
movie4 = graph.addVertex(label, 'movie', 'name', 'The Bourne Trilogy')
movie5 = graph.addVertex(label, 'movie', 'name', 'Jurassic Park')
movie6 = graph.addVertex(label, 'movie', 'name', 'The 40 Year Old Virgin')
movie7 = graph.addVertex(label, 'movie', 'name', 'Thank You for Smoking')
movie8 = graph.addVertex(label, 'movie', 'name', 'Happy Gilmore')
movie9 = graph.addVertex(label, 'movie', 'name', 'Knocked Up')
movie10 = graph.addVertex(label, 'movie', 'name', 'A Beautiful Mind')
movie11 = graph.addVertex(label, 'movie', 'name', 'Bridesmaids')
movie12 = graph.addVertex(label, 'movie', 'name', 'The Dark Knight Trilogy')
movie13 = graph.addVertex(label, 'movie', 'name', 'Charlie\'s Angels')
movie14 = graph.addVertex(label, 'movie', 'name', 'Avatar')
movie15 = graph.addVertex(label, 'movie', 'name', 'Children of Men')
movie16 = graph.addVertex(label, 'movie', 'name', 'Gladiator')
movie17 = graph.addVertex(label, 'movie', 'name', 'Shutter Island')
movie18 = graph.addVertex(label, 'movie', 'name', 'Forgetting Sarah Marshall')
movie19 = graph.addVertex(label, 'movie', 'name', 'Inception')
movie20 = graph.addVertex(label, 'movie', 'name', 'The Social Network')
movie21 = graph.addVertex(label, 'movie', 'name', 'Marley and Me')
movie22 = graph.addVertex(label, 'movie', 'name', 'Taken')
movie23 = graph.addVertex(label, 'movie', 'name', 'Pan\'s Labyrinth')
movie24 = graph.addVertex(label, 'movie', 'name', 'Inglourious Basterds')
movie25 = graph.addVertex(label, 'movie', 'name', 'The Ocean\'s Trilogy')
movie26 = graph.addVertex(label, 'movie', 'name', 'The Notebook')
movie27 = graph.addVertex(label, 'movie', 'name', 'The Devil Wears Prada')
movie28 = graph.addVertex(label, 'movie', 'name', 'The Truman Show')
movie29 = graph.addVertex(label, 'movie', 'name', 'WALL-E')
movie30 = graph.addVertex(label, 'movie', 'name', 'Paranormal Activity')
person1.addEdge('rated', movie1, 'rating', 4)
person1.addEdge('rated', movie2, 'rating', 3)
person1.addEdge('rated', movie3, 'rating', 8)
person1.addEdge('rated', movie5, 'rating', 8)
person1.addEdge('rated', movie6, 'rating', 6)
person1.addEdge('rated', movie8, 'rating', 6)
person1.addEdge('rated', movie9, 'rating', 4)
person1.addEdge('rated', movie12, 'rating', 7)
person1.addEdge('rated', movie14, 'rating', 5)
person1.addEdge('rated', movie16, 'rating', 2)
person1.addEdge('rated', movie20, 'rating', 9)
person1.addEdge('rated', movie27, 'rating', 4)
person1.addEdge('rated', movie28, 'rating', 9)
person1.addEdge('rated', movie29, 'rating', 10)
person2.addEdge('rated', movie1, 'rating', 3)
person2.addEdge('rated', movie2, 'rating', 8)
person2.addEdge('rated', movie5, 'rating', 7)
person2.addEdge('rated', movie6, 'rating', 5)
person2.addEdge('rated', movie7, 'rating', 8)
person2.addEdge('rated', movie9, 'rating', 6)
person2.addEdge('rated', movie10, 'rating', 8)
person2.addEdge('rated', movie13, 'rating', 7)
person2.addEdge('rated', movie16, 'rating', 5)
person2.addEdge('rated', movie24, 'rating', 9)
person2.addEdge('rated', movie25, 'rating', 9)
person2.addEdge('rated', movie27, 'rating', 7)
person2.addEdge('rated', movie28, 'rating', 2)
person3.addEdge('rated', movie1, 'rating', 8)
person3.addEdge('rated', movie2, 'rating', 10)
person3.addEdge('rated', movie3, 'rating', 7)
person3.addEdge('rated', movie4, 'rating', 9)
person3.addEdge('rated', movie5, 'rating', 8)
person3.addEdge('rated', movie6, 'rating', 5)
person3.addEdge('rated', movie7, 'rating', 8)
person3.addEdge('rated', movie8, 'rating', 7)
person3.addEdge('rated', movie9, 'rating', 7)
person3.addEdge('rated', movie10, 'rating', 9)
person3.addEdge('rated', movie11, 'rating', 5)
person3.addEdge('rated', movie12, 'rating', 7)
person3.addEdge('rated', movie13, 'rating', 3)
person3.addEdge('rated', movie14, 'rating', 10)
person3.addEdge('rated', movie15, 'rating', 7)
person3.addEdge('rated', movie16, 'rating', 9)
person3.addEdge('rated', movie17, 'rating', 7)
person3.addEdge('rated', movie18, 'rating', 5)
person3.addEdge('rated', movie19, 'rating', 8)
person3.addEdge('rated', movie20, 'rating', 3)
person3.addEdge('rated', movie21, 'rating', 4)
person3.addEdge('rated', movie22, 'rating', 6)
person3.addEdge('rated', movie23, 'rating', 9)
person3.addEdge('rated', movie24, 'rating', 8)
person3.addEdge('rated', movie25, 'rating', 7)
person3.addEdge('rated', movie26, 'rating', 5)
person3.addEdge('rated', movie27, 'rating', 2)
person3.addEdge('rated', movie28, 'rating', 4)
person3.addEdge('rated', movie29, 'rating', 8)
person3.addEdge('rated', movie30, 'rating', 5)
person4.addEdge('rated', movie1, 'rating', 8)
person4.addEdge('rated', movie2, 'rating', 9)
person4.addEdge('rated', movie3, 'rating', 7)
person4.addEdge('rated', movie4, 'rating', 9)
person4.addEdge('rated', movie5, 'rating', 8)
person4.addEdge('rated', movie6, 'rating', 6)
person4.addEdge('rated', movie8, 'rating', 7)
person4.addEdge('rated', movie9, 'rating', 6)
person4.addEdge('rated', movie10, 'rating', 8)
person4.addEdge('rated', movie11, 'rating', 8)
person4.addEdge('rated', movie12, 'rating', 9)
person4.addEdge('rated', movie13, 'rating', 7)
person4.addEdge('rated', movie14, 'rating', 7)
person4.addEdge('rated', movie15, 'rating', 10)
person4.addEdge('rated', movie16, 'rating', 9)
person4.addEdge('rated', movie17, 'rating', 9)
person4.addEdge('rated', movie18, 'rating', 5)
person4.addEdge('rated', movie19, 'rating', 10)
person4.addEdge('rated', movie20, 'rating', 7)
person4.addEdge('rated', movie21, 'rating', 7)
person4.addEdge('rated', movie26, 'rating', 6)
person4.addEdge('rated', movie27, 'rating', 9)
person4.addEdge('rated', movie28, 'rating', 7)
person5.addEdge('rated', movie2, 'rating', 10)
person5.addEdge('rated', movie5, 'rating', 8)
person5.addEdge('rated', movie12, 'rating', 6)
person5.addEdge('rated', movie13, 'rating', 10)
person5.addEdge('rated', movie14, 'rating', 6)
person5.addEdge('rated', movie16, 'rating', 4)
person5.addEdge('rated', movie19, 'rating', 8)
person5.addEdge('rated', movie20, 'rating', 5)
person5.addEdge('rated', movie25, 'rating', 7)
person6.addEdge('rated', movie1, 'rating', 7)
person6.addEdge('rated', movie2, 'rating', 8)
person6.addEdge('rated', movie4, 'rating', 7)
person6.addEdge('rated', movie5, 'rating', 8)
person6.addEdge('rated', movie16, 'rating', 9)
person6.addEdge('rated', movie23, 'rating', 10)
person6.addEdge('rated', movie24, 'rating', 8)
person6.addEdge('rated', movie25, 'rating', 6)
person6.addEdge('rated', movie28, 'rating', 8)
person6.addEdge('rated', movie29, 'rating', 8)
person6.addEdge('rated', movie30, 'rating', 9)
person7.addEdge('rated', movie1, 'rating', 8)
person7.addEdge('rated', movie2, 'rating', 9)
person7.addEdge('rated', movie3, 'rating', 4)
person7.addEdge('rated', movie4, 'rating', 9)
person7.addEdge('rated', movie5, 'rating', 9)
person7.addEdge('rated', movie6, 'rating', 9)
person7.addEdge('rated', movie7, 'rating', 9)
person7.addEdge('rated', movie8, 'rating', 7)
person7.addEdge('rated', movie9, 'rating', 7)
person7.addEdge('rated', movie10, 'rating', 8)
person7.addEdge('rated', movie11, 'rating', 9)
person7.addEdge('rated', movie12, 'rating', 9)
person7.addEdge('rated', movie13, 'rating', 5)
person7.addEdge('rated', movie14, 'rating', 9)
person7.addEdge('rated', movie15, 'rating', 6)
person7.addEdge('rated', movie16, 'rating', 8)
person7.addEdge('rated', movie18, 'rating', 8)
person7.addEdge('rated', movie19, 'rating', 7)
person7.addEdge('rated', movie20, 'rating', 7)
person7.addEdge('rated', movie22, 'rating', 9)
person7.addEdge('rated', movie25, 'rating', 8)
person7.addEdge('rated', movie26, 'rating', 9)
person7.addEdge('rated', movie28, 'rating', 6)
person7.addEdge('rated', movie29, 'rating', 9)
person8.addEdge('rated', movie1, 'rating', 5)
person8.addEdge('rated', movie2, 'rating', 9)
person8.addEdge('rated', movie4, 'rating', 10)
person8.addEdge('rated', movie5, 'rating', 8)
person8.addEdge('rated', movie12, 'rating', 10)
person8.addEdge('rated', movie13, 'rating', 9)
person8.addEdge('rated', movie14, 'rating', 7)
person8.addEdge('rated', movie19, 'rating', 6)
person8.addEdge('rated', movie22, 'rating', 10)
person8.addEdge('rated', movie24, 'rating', 10)
person8.addEdge('rated', movie25, 'rating', 9)
person9.addEdge('rated', movie1, 'rating', 8)
person9.addEdge('rated', movie2, 'rating', 8)
person9.addEdge('rated', movie4, 'rating', 9)
person9.addEdge('rated', movie5, 'rating', 9)
person9.addEdge('rated', movie6, 'rating', 9)
person9.addEdge('rated', movie9, 'rating', 8)
person9.addEdge('rated', movie10, 'rating', 8)
person9.addEdge('rated', movie13, 'rating', 7)
person9.addEdge('rated', movie14, 'rating', 9)
person9.addEdge('rated', movie19, 'rating', 7)
person9.addEdge('rated', movie20, 'rating', 8)
person9.addEdge('rated', movie21, 'rating', 8)
person9.addEdge('rated', movie22, 'rating', 8)
person9.addEdge('rated', movie23, 'rating', 7)
person9.addEdge('rated', movie25, 'rating', 7)
person9.addEdge('rated', movie27, 'rating', 7)
person9.addEdge('rated', movie29, 'rating', 9)
person10.addEdge('rated', movie1, 'rating', 3)
person10.addEdge('rated', movie2, 'rating', 5)
person10.addEdge('rated', movie3, 'rating', 5)
person10.addEdge('rated', movie4, 'rating', 8)
person10.addEdge('rated', movie5, 'rating', 7)
person10.addEdge('rated', movie9, 'rating', 3)
person10.addEdge('rated', movie10, 'rating', 9)
person10.addEdge('rated', movie11, 'rating', 5)
person10.addEdge('rated', movie12, 'rating', 7)
person10.addEdge('rated', movie13, 'rating', 9)
person10.addEdge('rated', movie14, 'rating', 10)
person10.addEdge('rated', movie16, 'rating', 8)
person10.addEdge('rated', movie20, 'rating', 8)
person10.addEdge('rated', movie24, 'rating', 9)
person10.addEdge('rated', movie25, 'rating', 9)
person10.addEdge('rated', movie26, 'rating', 5)
person10.addEdge('rated', movie27, 'rating', 9)
person10.addEdge('rated', movie29, 'rating', 9)
person11.addEdge('rated', movie1, 'rating', 10)
person11.addEdge('rated', movie2, 'rating', 10)
person11.addEdge('rated', movie3, 'rating', 5)
person11.addEdge('rated', movie4, 'rating', 7)
person11.addEdge('rated', movie5, 'rating', 9)
person11.addEdge('rated', movie6, 'rating', 5)
person11.addEdge('rated', movie7, 'rating', 5)
person11.addEdge('rated', movie8, 'rating', 6)
person11.addEdge('rated', movie9, 'rating', 7)
person11.addEdge('rated', movie10, 'rating', 10)
person11.addEdge('rated', movie11, 'rating', 7)
person11.addEdge('rated', movie12, 'rating', 9)
person11.addEdge('rated', movie13, 'rating', 8)
person11.addEdge('rated', movie14, 'rating', 10)
person11.addEdge('rated', movie15, 'rating', 7)
person11.addEdge('rated', movie16, 'rating', 7)
person11.addEdge('rated', movie17, 'rating', 7)
person11.addEdge('rated', movie18, 'rating', 7)
person11.addEdge('rated', movie19, 'rating', 6)
person11.addEdge('rated', movie20, 'rating', 9)
person11.addEdge('rated', movie21, 'rating', 7)
person11.addEdge('rated', movie22, 'rating', 8)
person11.addEdge('rated', movie23, 'rating', 7)
person11.addEdge('rated', movie24, 'rating', 8)
person11.addEdge('rated', movie25, 'rating', 7)
person11.addEdge('rated', movie26, 'rating', 8)
person11.addEdge('rated', movie27, 'rating', 7)
person11.addEdge('rated', movie28, 'rating', 9)
person11.addEdge('rated', movie29, 'rating', 9)
person11.addEdge('rated', movie30, 'rating', 7)
person12.addEdge('rated', movie1, 'rating', 5)
person12.addEdge('rated', movie2, 'rating', 10)
person12.addEdge('rated', movie3, 'rating', 8)
person12.addEdge('rated', movie4, 'rating', 5)
person12.addEdge('rated', movie5, 'rating', 10)
person12.addEdge('rated', movie6, 'rating', 4)
person12.addEdge('rated', movie7, 'rating', 10)
person12.addEdge('rated', movie8, 'rating', 5)
person12.addEdge('rated', movie9, 'rating', 5)
person12.addEdge('rated', movie10, 'rating', 10)
person12.addEdge('rated', movie11, 'rating', 5)
person12.addEdge('rated', movie12, 'rating', 10)
person12.addEdge('rated', movie13, 'rating', 5)
person12.addEdge('rated', movie14, 'rating', 10)
person12.addEdge('rated', movie15, 'rating', 9)
person12.addEdge('rated', movie16, 'rating', 10)
person12.addEdge('rated', movie17, 'rating', 7)
person12.addEdge('rated', movie18, 'rating', 5)
person12.addEdge('rated', movie19, 'rating', 5)
person12.addEdge('rated', movie20, 'rating', 7)
person12.addEdge('rated', movie21, 'rating', 10)
person12.addEdge('rated', movie22, 'rating', 7)
person12.addEdge('rated', movie23, 'rating', 10)
person12.addEdge('rated', movie24, 'rating', 8)
person12.addEdge('rated', movie25, 'rating', 8)
person12.addEdge('rated', movie26, 'rating', 10)
person12.addEdge('rated', movie27, 'rating', 5)
person12.addEdge('rated', movie28, 'rating', 9)
person12.addEdge('rated', movie29, 'rating', 7)
person12.addEdge('rated', movie30, 'rating', 3)
person13.addEdge('rated', movie1, 'rating', 7)
person13.addEdge('rated', movie2, 'rating', 10)
person13.addEdge('rated', movie3, 'rating', 7)
person13.addEdge('rated', movie4, 'rating', 8)
person13.addEdge('rated', movie5, 'rating', 9)
person13.addEdge('rated', movie6, 'rating', 4)
person13.addEdge('rated', movie7, 'rating', 6)
person13.addEdge('rated', movie8, 'rating', 3)
person13.addEdge('rated', movie9, 'rating', 7)
person13.addEdge('rated', movie10, 'rating', 9)
person13.addEdge('rated', movie11, 'rating', 4)
person13.addEdge('rated', movie12, 'rating', 7)
person13.addEdge('rated', movie13, 'rating', 6)
person13.addEdge('rated', movie14, 'rating', 6)
person13.addEdge('rated', movie15, 'rating', 9)
person13.addEdge('rated', movie16, 'rating', 9)
person13.addEdge('rated', movie17, 'rating', 8)
person13.addEdge('rated', movie18, 'rating', 7)
person13.addEdge('rated', movie19, 'rating', 8)
person13.addEdge('rated', movie20, 'rating', 5)
person13.addEdge('rated', movie21, 'rating', 4)
person13.addEdge('rated', movie22, 'rating', 4)
person13.addEdge('rated', movie23, 'rating', 10)
person13.addEdge('rated', movie24, 'rating', 7)
person13.addEdge('rated', movie25, 'rating', 10)
person13.addEdge('rated', movie26, 'rating', 8)
person13.addEdge('rated', movie27, 'rating', 8)
person13.addEdge('rated', movie28, 'rating', 10)
person13.addEdge('rated', movie29, 'rating', 10)
person13.addEdge('rated', movie30, 'rating', 9)
person14.addEdge('rated', movie1, 'rating', 5)
person14.addEdge('rated', movie2, 'rating', 8)
person14.addEdge('rated', movie4, 'rating', 8)
person14.addEdge('rated', movie5, 'rating', 2)
person14.addEdge('rated', movie7, 'rating', 10)
person14.addEdge('rated', movie9, 'rating', 9)
person14.addEdge('rated', movie10, 'rating', 9)
person14.addEdge('rated', movie13, 'rating', 8)
person14.addEdge('rated', movie14, 'rating', 7)
person14.addEdge('rated', movie15, 'rating', 9)
person14.addEdge('rated', movie16, 'rating', 8)
person14.addEdge('rated', movie19, 'rating', 9)
person14.addEdge('rated', movie20, 'rating', 6)
person14.addEdge('rated', movie22, 'rating', 7)
person14.addEdge('rated', movie24, 'rating', 9)
person14.addEdge('rated', movie25, 'rating', 7)
person14.addEdge('rated', movie27, 'rating', 5)
person14.addEdge('rated', movie28, 'rating', 6)
person14.addEdge('rated', movie29, 'rating', 7)
person15.addEdge('rated', movie1, 'rating', 8)
person15.addEdge('rated', movie2, 'rating', 10)
person15.addEdge('rated', movie3, 'rating', 4)
person15.addEdge('rated', movie4, 'rating', 5)
person15.addEdge('rated', movie5, 'rating', 6)
person15.addEdge('rated', movie6, 'rating', 7)
person15.addEdge('rated', movie7, 'rating', 8)
person15.addEdge('rated', movie8, 'rating', 8)
person15.addEdge('rated', movie9, 'rating', 6)
person15.addEdge('rated', movie10, 'rating', 10)
person15.addEdge('rated', movie11, 'rating', 10)
person15.addEdge('rated', movie12, 'rating', 9)
person15.addEdge('rated', movie13, 'rating', 4)
person15.addEdge('rated', movie14, 'rating', 10)
person15.addEdge('rated', movie15, 'rating', 5)
person15.addEdge('rated', movie16, 'rating', 9)
person15.addEdge('rated', movie17, 'rating', 5)
person15.addEdge('rated', movie18, 'rating', 10)
person15.addEdge('rated', movie19, 'rating', 8)
person15.addEdge('rated', movie20, 'rating', 8)
person15.addEdge('rated', movie21, 'rating', 5)
person15.addEdge('rated', movie22, 'rating', 6)
person15.addEdge('rated', movie23, 'rating', 5)
person15.addEdge('rated', movie24, 'rating', 8)
person15.addEdge('rated', movie25, 'rating', 7)
person15.addEdge('rated', movie26, 'rating', 9)
person15.addEdge('rated', movie27, 'rating', 10)
person15.addEdge('rated', movie28, 'rating', 10)
person15.addEdge('rated', movie29, 'rating', 9)
person15.addEdge('rated', movie30, 'rating', 8)
// Query 2
g.V().has(label, 'person').has('name', 'Michael Sherman').
outE('rated').as('r1').inV().as('m').
inE('rated').as('r2').outV().has('name', 'Michael Hunger').
select('m', 'r1', 'r2').by('name').by('rating').by('rating')
// Query 3
g.V().match(
__.as("p1").outE("rated").as("r1"),
__.as("r1").inV().as("m"),
__.as("m").inE("rated").as("r2"),
__.as("r2").outV().as("p2")
).where("p1", neq("p2")).
group().by(select("p1","p2")).
by(select("r1","r2").by("rating")).unfold().as("kv").
mapKeys().addOutE("p1", "similarity", "p2").as("e").
sideEffect {
def r = it.path().get("kv").getValue()
def xyDotProduct = r.collect {it.r1*it.r2}.sum()
def xLength = Math.sqrt(r.collect {it.r1*it.r1}.sum())
def yLength = Math.sqrt(r.collect {it.r2*it.r2}.sum())
def similarity = xyDotProduct / (xLength * yLength)
it.get().property("similarity", similarity)
}.iterate()
// Query 4
g.V().has(label, 'person').has('name', 'Michael Sherman').
outE('similarity').as('s').inV().has('name', 'Michael Hunger').
select('s').by('similarity')
// Query 5
// pointless; just used for visualizations
// Query 6
g.V().hasLabel("person").has("name", "Grace Andrews").
outE("similarity").order().by("similarity", decr).limit(5).as("s").inV().as("p2").
select("p2","s").by("name").by("similarity")
// Query 7
g.V().has("name", "Zoltan Varju").match(
__.as("a").outE("similarity").as("s"),
__.as("s").inV().as("b"),
__.as("b").outE("rated").as("r"),
__.as("r").inV().as("m"),
__.not(__.as("a").out("rated").as("m"))).select("m","s","r").by("name").by("similarity").by("rating").
group().by(select("m")).by(select("s","r")).by(unfold().order().by(select("s"), decr).limit(3).select("r").mean()).
order(local).by(valueDecr).by(keyIncr).next()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment