SlideShare a Scribd company logo
1 of 62
Download to read offline
GraphAware
TM
Michal Bachman
graphaware.com
@graph_aware
Recommendations
with Neo4j
Building a high-performance recommendation engine
GraphAware
TM
Quick Intro
Why Graphs?
Business and Technical Challenges
GraphAware Recommendation Engine
About This Talk
GraphAware
TM
News you should read
Books you should buy
People you may know
People you should date
People you should market a product to
…
Recommendation Engines
GraphAware
TM
Content-based (features)
Collaborative filtering (user <-> item relationships)
Recommendation Engines
GraphAware
TM
Features as well as relationships can be naturally
represented as a graph.
Good News
GraphAware
TM
Example
IS_OF_GENRE
title:
“Love Actually”
Movie
name: “Bob”
User
name:
“Comedy”
Genre
RATED
rating: 5
name: “Alice”
User
name:
“Romance”
Genre
title:
“American Pie”
Movie
IS_OF_GENRE
IS_OF_GENRE
RATEDrating: 5
INTERESTED_IN
rating: 5
RATED
GraphAware
TM
Easy to understand
Natural to model
Flexible (schema-free)
Fast to query
Graphs (Neo4j)
GraphAware
TM
Great for a quick PoC
Great for smaller data sets
Great for relatively simple logic
Cypher
GraphAware
TM
Cypher
MATCH
(u:User)-[:LIKED]->(m:Movie),
(m)<-[:LIKED]-(another:User),
(another)-[:LIKED]->(reco:Movie)
WHERE NOT
(u)-[:LIKED|DISLIKED]->(reco)
RETURN reco;
GraphAware
TM
Requirements of real-world recommendation
engines are often much more complex.
The Reality
GraphAware
TM
Imagine you’re building the ”people you may
know” feature on LinkedIn.
Example
GraphAware
TM
After a brainstorming session, your team came up
with the following ways of finding people one may
know:
Example
GraphAware
TM
Common contacts
Facebook friends in common
Email / mobile contacts in common
Each others email / mobile contact
Worked for the same company
Studied at the same school
Share the same interest
Live in the same city
People You May Know
GraphAware
TM
But that’s just the beginning! Let’s go back and
re-visit.
Example
GraphAware
TM
More contacts in common = better chance?
Same city / school / company = does size matter?
What about emails that don’t represent a person?
What about people already connected?
And pending…
And rejected…
And repeatedly ignored…
People You May Know
GraphAware
TM
Finding things to recommend
Serving the most relevant recommendations
Measuring the quality of recommendations
Time to market / cost of development
Business Challenges
GraphAware
TM
Performance (real-time!)
Simplicity
Flexibility
Technical Challenges
GraphAware
TM
So we came up with an open-source
recommendation engine skeleton that will help you
solve all the challenges.
We’ve done it before
GraphAware
TM
plugin to Neo4j (uses GraphAware Framework)
you have to use a JVM-language
opinionated architecture
very fast
very flexible
handles all the plumbing
Recommendation Engine
GraphAware
TM
Engine per recommendation “reason” (core logic)
Engine executes a graph traversal to find items
Engines are assembled into higher-level engines
Design Decisions
GraphAware
TM
Example
IS_OF_GENRE
title:
“Love Actually”
Movie
name: “Bob”
User
name:
“Comedy”
Genre
RATED
rating: 5
name: “Alice”
User
name:
“Romance”
Genre
title:
“American Pie”
Movie
IS_OF_GENRE
IS_OF_GENRE
RATEDrating: 5
INTERESTED_IN
rating: 5
RATED
GraphAware
TM
Engine per recommendation “reason” (core logic)
Engine executes a graph traversal to find items
Engines are assembled to higher-level engines
Items discovered multiple times are more relevant
Relevance depends on how was item discovered
Design Decision
GraphAware
TM
Example
IS_OF_GENRE
title:
“Love Actually”
Movie
name: “Bob”
User
name:
“Comedy”
Genre
RATED
rating: 5
name: “Alice”
User
name:
“Romance”
Genre
title:
“American Pie”
Movie
IS_OF_GENRE
IS_OF_GENRE
RATEDrating: 5
INTERESTED_IN
rating: 5
RATED
GraphAware
TM
Engine per recommendation “reason” (core logic)
Engine executes a graph traversal to find items
Engines are assembled to higher-level engines
Items discovered multiple times are more relevant
Relevance depends on how was item discovered
Items not to be recommended: “cross-cutting”
concern
Design Decisions
GraphAware
TM
Example
IS_OF_GENRE
title:
“Love Actually”
Movie
name: “Bob”
User
name:
“Comedy”
Genre
RATED
rating: 5
name: “Alice”
User
name:
“Romance”
Genre
title:
“American Pie”
Movie
IS_OF_GENRE
IS_OF_GENRE
RATEDrating: 5
INTERESTED_IN
rating: 5
RATED
GraphAware
TM
Input -> Engine -> Recommendations
Scores and Score Transformers
Blacklists
Filters
Post-processors
Context (how many, how fast,…?)
Loggers
Architecture
GraphAware
TM
In 5 minutes, we’ll build a simple engine that
recommends who you should be friends with.
Let’s Build Something
GraphAware
TM
0) Model
GraphAware
TM
1) Discover
GraphAware
TM
public class FriendsInCommon extends SomethingInCommon {



@Override

public String name() {

return "friendsInCommon";

}



@Override

protected RelationshipType getType() {

return FRIEND_OF;

}



@Override

protected Direction getDirection() {

return BOTH;

}

}
GraphAware
TM
2) Score
GraphAware
TM
public class FriendsInCommon extends SomethingInCommon {

@Override

protected ScoreTransformer scoreTransformer() {

return new ParetoScoreTransformer(100, 10);

}



@Override

public String name() {

return "friendsInCommon";

}



@Override

protected RelationshipType getType() {

return FRIEND_OF;

}



@Override

protected Direction getDirection() {

return BOTH;

}

}
GraphAware
TM
3) Post-Process
GraphAware
TM
public class RewardSameLocation extends RewardSomethingShared {



@Override

protected RelationshipType type() {

return LIVES_IN;

}



@Override

protected Direction direction() {

return OUTGOING;

}



@Override

protected float scoreValue(Node reco, Node in, Node shared) {

return 10;

}



@Override

protected String scoreName() {

return "sameLocation";

}

}
GraphAware
TM
public class RewardSameLabels implements PostProcessor<Node, Node> {



@Override

public void postProcess(Recommendations<Node> out, Node in) {

Label[] inLabels = toArray(in.getLabels());



for (Recommendation<Node> reco : out.get()) {

if (Arrays.equals(inLabels, toArray(reco.getItem().getLabels()))) {

reco.add("sameGender", 10);

}

}

}

}
GraphAware
TM
4) Filter
GraphAware
TM
public final class FriendsContextFactory extends Neo4jContextFactory {



@Override

protected List<BlacklistBuilder<Node, Node>> blacklistBuilders() {

return asList(

new ExcludeSelf(),

new ExistingRelationshipBlacklistBuilder(FRIEND_OF, BOTH)

);

}



@Override

protected List<Filter<Node, Node>> filters() {

return asList(

new ExcludeSelf()

);

}

}
GraphAware
TM
5) Assemble
GraphAware
TM
public final class FriendsComputingEngine extends Neo4jTopLevelDelegatingEngine {



public FriendsComputingEngine() {

super(new FriendsContextFactory());

}



@Override

protected List<RecommendationEngine<Node, Node>> engines() {

return asList(

new FriendsInCommon(),

new RandomPeople()

);

}



@Override

protected List<PostProcessor<Node, Node>> postProcessors() {

return asList(

new RewardSameLabels(),

new RewardSameLocation(),

new PenalizeAgeDifference()

);

}

}
GraphAware
TM
?) Precompute
GraphAware
TM
public final class FriendsComputingEngine extends Neo4jTopLevelDelegatingEngine {



public FriendsComputingEngine() {

super(new FriendsContextFactory());

}



@Override

protected List<RecommendationEngine<Node, Node>> engines() {

return asList(

new FriendsInCommon(),

new RandomPeople()

);

}



@Override

protected List<PostProcessor<Node, Node>> postProcessors() {

return asList(

new RewardSameLabels(),

new RewardSameLocation(),

new PenalizeAgeDifference()

);

}



@Override

public ParticipationPolicy<Node, Node> participationPolicy(Context<Node, Node> context) {

return ParticipationPolicy.IF_MORE_RESULTS_NEEDED;

}

}
GraphAware
TM
public final class FriendsRecoEngine extends Neo4jTopLevelDelegatingEngine {



public FriendsRecommendationEngine() {

super(new FriendsContextFactory());

}



@Override

protected List<RecommendationEngine<Node, Node>> engines() {

return asList(

new Neo4jPrecomputedEngine(),

new FriendsComputingEngine()

);

}

}
GraphAware
TM
6) Log
GraphAware
TM
public final class FriendsRecoEngine extends Neo4jTopLevelDelegatingEngine {



public FriendsRecommendationEngine() {

super(new FriendsContextFactory());

}



@Override

protected List<RecommendationEngine<Node, Node>> engines() {

return asList(

new Neo4jPrecomputedEngine(),

new FriendsComputingEngine()

);

}



@Override

protected List<Logger<Node, Node>> loggers() {

return asList( 

new Slf4jRecommendationLogger<Node, Node>(),

new Slf4jStatisticsLogger<Node, Node>()

);

}

}
GraphAware
TM
7) Test
GraphAware
TM
List<Recommendation<Node>> reco =

recommendationEngine.recommend(getPersonByName("Adam"), Mode.REAL_TIME, 2);



String expected = 

"(Vince {total:19.338144," +

"ageDifference:-5.527864," +

"friendsInCommon:14.866008," +

"sameGender:10.0})," +



"(Luanne {total:11.553411," +

"ageDifference:-3.312597," +

"friendsInCommon:14.866008})";



assertEquals(expected, toString(reco));
GraphAware
TM
List<Recommendation<Node>> reco =
recommendationEngine.recommend(getPersonByName("Luanne"), REAL_TIME, 4);



assertEquals("Daniela", reco.get(0).getItem().getProperty("name"));

assertEquals(22, reco.get(0).getScore().getTotalScore(), 0.5);



assertEquals("Adam", reco.get(1).getItem().getProperty("name"));

assertEquals(12, reco.get(1).getScore().getTotalScore(), 0.5);



assertEquals("Vince", reco.get(2).getItem().getProperty("name"));

assertEquals(8, reco.get(2).getScore().getTotalScore(), 0.5);



assertEquals("Bob", reco.get(3).getItem().getProperty("name"));

assertEquals(-9, reco.get(3).getScore().getTotalScore(), 0.5);
GraphAware
TM
Finding things to recommend
Serving the most relevant recommendations
Measuring the quality of recommendations
Time to market / cost of development
Business Challenges
GraphAware
TM
Performance (real-time!)
Simplicity
Flexibility
Technical Challenges
GraphAware
TM
Getting Started
<dependencies>
...
<dependency>

<groupId>com.graphaware.neo4j</groupId>

<artifactId>recommendation-engine</artifactId>
<version>2.1.6.27.2</version>

</dependency>
...
<dependencies>
GraphAware
TM
Built-in ability to pre-compute recommendations
Other built-in base-classes
But we need your help!
https://github.com/graphaware/neo4j-reco
There’s More!
GraphAware
TM
Built-in algorithms
Time-based ParticipationPolicy
Integration with compute engines
Machine learning
Future
GraphAware
TM
GraphAware Framework makes it easy to build,
test, and deploy generic as well as domain-
specific functionality for Neo4j.
GraphAware Framework
GraphAware
TM
GraphUnit

& RestTest
RelCount WarmUp Schema (wip)
Recommendation
Engine
GraphAware Framework
ChangeFeed UUID TimeTree Algorithms NodeRank
GraphAware
TM
Open Source (GPL)
Active
Production Ready
Github: github.com/graphaware
Our Web: graphaware.com
Maven Central
GraphAware Framework
GraphAware
TM
Try it
Give us feedback
Contribute
Build your own modules
Get in touch for support / consultancy
GraphAware Framework
GraphAware
TM
GraphAware Events
31

Jan
Recommendation
Engines in Brussels
(FOSDEM)
31

Jan
GraphGen in Brussels
(FOSDEM)
5

Feb
Recommendation
Engines Webinar
5

Feb
Meetup at GraphAware
(build your own
Recommendation Engine)
10

Feb
Neo4j Fundamentals in
Manchester
10

Feb
Neo4j Meetup in
Manchester
17

Feb
Neo4j Fundamentals in
Edinburgh
17

Feb
Neo4j Meetup in
Edinburgh
GraphAware
TM
GraphConnect Europe 2015
When:
Where:
Tickets:
Call for Papers:
Sponsors:
Thursday, 7th May, 2015 - main Conference Day
Wednesday, 6th May 2015 - Training Day
Etc venues, 155 Bishopsgate, London
(next to Liverpool Street Station)
now available on www.graphconnect.com
199$ early bird plus 100$ for training
499$ full price plus 100$ for training
open now till 29th January
all Neo4j community members, customers or
general graph enthusiasts are invited to submit their talk
open now till 29th January, email:
gceurope@neotechnology.com
graphaware.com
@graph_aware
Thank You!
GraphAware
TM

More Related Content

What's hot

Semantic & Multilingual Strategies in Lucene/Solr: Presented by Trey Grainger...
Semantic & Multilingual Strategies in Lucene/Solr: Presented by Trey Grainger...Semantic & Multilingual Strategies in Lucene/Solr: Presented by Trey Grainger...
Semantic & Multilingual Strategies in Lucene/Solr: Presented by Trey Grainger...Lucidworks
 
Lazy man's learning: How To Build Your Own Text Summarizer
Lazy man's learning: How To Build Your Own Text SummarizerLazy man's learning: How To Build Your Own Text Summarizer
Lazy man's learning: How To Build Your Own Text SummarizerSho Fola Soboyejo
 
Semantic & Multilingual Strategies in Lucene/Solr
Semantic & Multilingual Strategies in Lucene/SolrSemantic & Multilingual Strategies in Lucene/Solr
Semantic & Multilingual Strategies in Lucene/SolrTrey Grainger
 
Key Lessons Learned Building Recommender Systems for Large-Scale Social Netw...
 Key Lessons Learned Building Recommender Systems for Large-Scale Social Netw... Key Lessons Learned Building Recommender Systems for Large-Scale Social Netw...
Key Lessons Learned Building Recommender Systems for Large-Scale Social Netw...Christian Posse
 
Behat - kilka scenariuszy co dalej
Behat - kilka scenariuszy co dalejBehat - kilka scenariuszy co dalej
Behat - kilka scenariuszy co dalejGrzegorz Skorupa
 
Rank by time or by relevance - Revisiting Email Search
Rank by time or by relevance - Revisiting Email SearchRank by time or by relevance - Revisiting Email Search
Rank by time or by relevance - Revisiting Email SearchDavid Carmel
 
Building Recommendation Platforms with Hadoop
Building Recommendation Platforms with HadoopBuilding Recommendation Platforms with Hadoop
Building Recommendation Platforms with HadoopJayant Shekhar
 

What's hot (7)

Semantic & Multilingual Strategies in Lucene/Solr: Presented by Trey Grainger...
Semantic & Multilingual Strategies in Lucene/Solr: Presented by Trey Grainger...Semantic & Multilingual Strategies in Lucene/Solr: Presented by Trey Grainger...
Semantic & Multilingual Strategies in Lucene/Solr: Presented by Trey Grainger...
 
Lazy man's learning: How To Build Your Own Text Summarizer
Lazy man's learning: How To Build Your Own Text SummarizerLazy man's learning: How To Build Your Own Text Summarizer
Lazy man's learning: How To Build Your Own Text Summarizer
 
Semantic & Multilingual Strategies in Lucene/Solr
Semantic & Multilingual Strategies in Lucene/SolrSemantic & Multilingual Strategies in Lucene/Solr
Semantic & Multilingual Strategies in Lucene/Solr
 
Key Lessons Learned Building Recommender Systems for Large-Scale Social Netw...
 Key Lessons Learned Building Recommender Systems for Large-Scale Social Netw... Key Lessons Learned Building Recommender Systems for Large-Scale Social Netw...
Key Lessons Learned Building Recommender Systems for Large-Scale Social Netw...
 
Behat - kilka scenariuszy co dalej
Behat - kilka scenariuszy co dalejBehat - kilka scenariuszy co dalej
Behat - kilka scenariuszy co dalej
 
Rank by time or by relevance - Revisiting Email Search
Rank by time or by relevance - Revisiting Email SearchRank by time or by relevance - Revisiting Email Search
Rank by time or by relevance - Revisiting Email Search
 
Building Recommendation Platforms with Hadoop
Building Recommendation Platforms with HadoopBuilding Recommendation Platforms with Hadoop
Building Recommendation Platforms with Hadoop
 

Viewers also liked

Advanced Neo4j Use Cases with the GraphAware Framework
Advanced Neo4j Use Cases with the GraphAware FrameworkAdvanced Neo4j Use Cases with the GraphAware Framework
Advanced Neo4j Use Cases with the GraphAware FrameworkMichal Bachman
 
Graph Based Recommendation Systems at eBay
Graph Based Recommendation Systems at eBayGraph Based Recommendation Systems at eBay
Graph Based Recommendation Systems at eBayDataStax Academy
 
Scaling with Riak at Showyou
Scaling with Riak at ShowyouScaling with Riak at Showyou
Scaling with Riak at ShowyouJohn Muellerleile
 
Redis : Play buzz uses Redis
Redis : Play buzz uses RedisRedis : Play buzz uses Redis
Redis : Play buzz uses RedisRedis Labs
 
Modelling Data as Graphs (Neo4j)
Modelling Data as Graphs (Neo4j)Modelling Data as Graphs (Neo4j)
Modelling Data as Graphs (Neo4j)Michal Bachman
 
An intro to Neo4j and some use cases (JFokus 2011)
An intro to Neo4j and some use cases (JFokus 2011)An intro to Neo4j and some use cases (JFokus 2011)
An intro to Neo4j and some use cases (JFokus 2011)Emil Eifrem
 
Riak Use Cases : Dissecting The Solutions To Hard Problems
Riak Use Cases : Dissecting The Solutions To Hard ProblemsRiak Use Cases : Dissecting The Solutions To Hard Problems
Riak Use Cases : Dissecting The Solutions To Hard ProblemsAndy Gross
 
Modelling Data in Neo4j (plus a few tips)
Modelling Data in Neo4j (plus a few tips)Modelling Data in Neo4j (plus a few tips)
Modelling Data in Neo4j (plus a few tips)Michal Bachman
 
Best Buy Web 2.0
Best Buy Web 2.0Best Buy Web 2.0
Best Buy Web 2.0Lee Aase
 
Introduction to Redis Data Structures: Sorted Sets
Introduction to Redis Data Structures: Sorted SetsIntroduction to Redis Data Structures: Sorted Sets
Introduction to Redis Data Structures: Sorted SetsScaleGrid.io
 
Redis and its many use cases
Redis and its many use casesRedis and its many use cases
Redis and its many use casesChristian Joudrey
 
Introduction to some top Redis use cases
Introduction to some top Redis use casesIntroduction to some top Redis use cases
Introduction to some top Redis use casesJosiah Carlson
 
The BestBuy.com Cloud Architecture
The BestBuy.com Cloud ArchitectureThe BestBuy.com Cloud Architecture
The BestBuy.com Cloud Architecturejoelcrabb
 
Using Redis at Facebook
Using Redis at FacebookUsing Redis at Facebook
Using Redis at FacebookRedis Labs
 
Neo4j GraphTalks - Einführung in Graphdatenbanken
Neo4j GraphTalks - Einführung in GraphdatenbankenNeo4j GraphTalks - Einführung in Graphdatenbanken
Neo4j GraphTalks - Einführung in GraphdatenbankenNeo4j
 
Graph Based Machine Learning with Applications to Media Analytics
Graph Based Machine Learning with Applications to Media AnalyticsGraph Based Machine Learning with Applications to Media Analytics
Graph Based Machine Learning with Applications to Media AnalyticsNYC Predictive Analytics
 
Redis Use Patterns (DevconTLV June 2014)
Redis Use Patterns (DevconTLV June 2014)Redis Use Patterns (DevconTLV June 2014)
Redis Use Patterns (DevconTLV June 2014)Itamar Haber
 
Neo4j the Anti Crime Database
Neo4j the Anti Crime DatabaseNeo4j the Anti Crime Database
Neo4j the Anti Crime DatabaseNeo4j
 
Neo4j GraphTalks Panama Papers
Neo4j GraphTalks Panama PapersNeo4j GraphTalks Panama Papers
Neo4j GraphTalks Panama PapersNeo4j
 

Viewers also liked (20)

Advanced Neo4j Use Cases with the GraphAware Framework
Advanced Neo4j Use Cases with the GraphAware FrameworkAdvanced Neo4j Use Cases with the GraphAware Framework
Advanced Neo4j Use Cases with the GraphAware Framework
 
Graph Based Recommendation Systems at eBay
Graph Based Recommendation Systems at eBayGraph Based Recommendation Systems at eBay
Graph Based Recommendation Systems at eBay
 
Scaling with Riak at Showyou
Scaling with Riak at ShowyouScaling with Riak at Showyou
Scaling with Riak at Showyou
 
Redis : Play buzz uses Redis
Redis : Play buzz uses RedisRedis : Play buzz uses Redis
Redis : Play buzz uses Redis
 
Modelling Data as Graphs (Neo4j)
Modelling Data as Graphs (Neo4j)Modelling Data as Graphs (Neo4j)
Modelling Data as Graphs (Neo4j)
 
An intro to Neo4j and some use cases (JFokus 2011)
An intro to Neo4j and some use cases (JFokus 2011)An intro to Neo4j and some use cases (JFokus 2011)
An intro to Neo4j and some use cases (JFokus 2011)
 
Riak Use Cases : Dissecting The Solutions To Hard Problems
Riak Use Cases : Dissecting The Solutions To Hard ProblemsRiak Use Cases : Dissecting The Solutions To Hard Problems
Riak Use Cases : Dissecting The Solutions To Hard Problems
 
Modelling Data in Neo4j (plus a few tips)
Modelling Data in Neo4j (plus a few tips)Modelling Data in Neo4j (plus a few tips)
Modelling Data in Neo4j (plus a few tips)
 
Redis use cases
Redis use casesRedis use cases
Redis use cases
 
Best Buy Web 2.0
Best Buy Web 2.0Best Buy Web 2.0
Best Buy Web 2.0
 
Introduction to Redis Data Structures: Sorted Sets
Introduction to Redis Data Structures: Sorted SetsIntroduction to Redis Data Structures: Sorted Sets
Introduction to Redis Data Structures: Sorted Sets
 
Redis and its many use cases
Redis and its many use casesRedis and its many use cases
Redis and its many use cases
 
Introduction to some top Redis use cases
Introduction to some top Redis use casesIntroduction to some top Redis use cases
Introduction to some top Redis use cases
 
The BestBuy.com Cloud Architecture
The BestBuy.com Cloud ArchitectureThe BestBuy.com Cloud Architecture
The BestBuy.com Cloud Architecture
 
Using Redis at Facebook
Using Redis at FacebookUsing Redis at Facebook
Using Redis at Facebook
 
Neo4j GraphTalks - Einführung in Graphdatenbanken
Neo4j GraphTalks - Einführung in GraphdatenbankenNeo4j GraphTalks - Einführung in Graphdatenbanken
Neo4j GraphTalks - Einführung in Graphdatenbanken
 
Graph Based Machine Learning with Applications to Media Analytics
Graph Based Machine Learning with Applications to Media AnalyticsGraph Based Machine Learning with Applications to Media Analytics
Graph Based Machine Learning with Applications to Media Analytics
 
Redis Use Patterns (DevconTLV June 2014)
Redis Use Patterns (DevconTLV June 2014)Redis Use Patterns (DevconTLV June 2014)
Redis Use Patterns (DevconTLV June 2014)
 
Neo4j the Anti Crime Database
Neo4j the Anti Crime DatabaseNeo4j the Anti Crime Database
Neo4j the Anti Crime Database
 
Neo4j GraphTalks Panama Papers
Neo4j GraphTalks Panama PapersNeo4j GraphTalks Panama Papers
Neo4j GraphTalks Panama Papers
 

Similar to Recommendations with Neo4j (FOSDEM 2015)

JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...Guillaume Laforge
 
Intro to GraphQL on Android with Apollo DroidconNYC 2017
Intro to GraphQL on Android with Apollo DroidconNYC 2017Intro to GraphQL on Android with Apollo DroidconNYC 2017
Intro to GraphQL on Android with Apollo DroidconNYC 2017Mike Nakhimovich
 
Overview of GraphQL & Clients
Overview of GraphQL & ClientsOverview of GraphQL & Clients
Overview of GraphQL & ClientsPokai Chang
 
Node.js vs Play Framework (with Japanese subtitles)
Node.js vs Play Framework (with Japanese subtitles)Node.js vs Play Framework (with Japanese subtitles)
Node.js vs Play Framework (with Japanese subtitles)Yevgeniy Brikman
 
Testing in AngularJS
Testing in AngularJSTesting in AngularJS
Testing in AngularJSPeter Drinnan
 
GraphQL - A query language to empower your API consumers (NDC Sydney 2017)
GraphQL - A query language to empower your API consumers (NDC Sydney 2017)GraphQL - A query language to empower your API consumers (NDC Sydney 2017)
GraphQL - A query language to empower your API consumers (NDC Sydney 2017)Rob Crowley
 
Groovy on Grails by Ziya Askerov
Groovy on Grails by Ziya AskerovGroovy on Grails by Ziya Askerov
Groovy on Grails by Ziya AskerovVuqar Suleymanov
 
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume LaforgeGroovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume LaforgeGuillaume Laforge
 
Pragmatic Parallels: Java and JavaScript
Pragmatic Parallels: Java and JavaScriptPragmatic Parallels: Java and JavaScript
Pragmatic Parallels: Java and JavaScriptdavejohnson
 
GraphConnect Europe 2016 - Building Spring Data Neo4j 4.1 Applications Like A...
GraphConnect Europe 2016 - Building Spring Data Neo4j 4.1 Applications Like A...GraphConnect Europe 2016 - Building Spring Data Neo4j 4.1 Applications Like A...
GraphConnect Europe 2016 - Building Spring Data Neo4j 4.1 Applications Like A...Neo4j
 
"Full Stack frameworks or a story about how to reconcile Front (good) and Bac...
"Full Stack frameworks or a story about how to reconcile Front (good) and Bac..."Full Stack frameworks or a story about how to reconcile Front (good) and Bac...
"Full Stack frameworks or a story about how to reconcile Front (good) and Bac...Fwdays
 
Polyglot Programming @ Jax.de 2010
Polyglot Programming @ Jax.de 2010Polyglot Programming @ Jax.de 2010
Polyglot Programming @ Jax.de 2010Andres Almiray
 
MongoDB.local Berlin: Building a GraphQL API with MongoDB, Prisma and Typescript
MongoDB.local Berlin: Building a GraphQL API with MongoDB, Prisma and TypescriptMongoDB.local Berlin: Building a GraphQL API with MongoDB, Prisma and Typescript
MongoDB.local Berlin: Building a GraphQL API with MongoDB, Prisma and TypescriptMongoDB
 
JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4alexsaves
 
Developing Lightning Components for Communities.pptx
Developing Lightning Components for Communities.pptxDeveloping Lightning Components for Communities.pptx
Developing Lightning Components for Communities.pptxDmitry Vinnik
 
Scripting Oracle Develop 2007
Scripting Oracle Develop 2007Scripting Oracle Develop 2007
Scripting Oracle Develop 2007Tugdual Grall
 

Similar to Recommendations with Neo4j (FOSDEM 2015) (20)

JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
JavaOne 2008 - TS-5793 - Groovy and Grails, changing the landscape of Java EE...
 
Intro to GraphQL on Android with Apollo DroidconNYC 2017
Intro to GraphQL on Android with Apollo DroidconNYC 2017Intro to GraphQL on Android with Apollo DroidconNYC 2017
Intro to GraphQL on Android with Apollo DroidconNYC 2017
 
Overview of GraphQL & Clients
Overview of GraphQL & ClientsOverview of GraphQL & Clients
Overview of GraphQL & Clients
 
Node.js vs Play Framework (with Japanese subtitles)
Node.js vs Play Framework (with Japanese subtitles)Node.js vs Play Framework (with Japanese subtitles)
Node.js vs Play Framework (with Japanese subtitles)
 
Testing in AngularJS
Testing in AngularJSTesting in AngularJS
Testing in AngularJS
 
Play á la Rails
Play á la RailsPlay á la Rails
Play á la Rails
 
Introduction to GraphQL
Introduction to GraphQLIntroduction to GraphQL
Introduction to GraphQL
 
GraphQL - A query language to empower your API consumers (NDC Sydney 2017)
GraphQL - A query language to empower your API consumers (NDC Sydney 2017)GraphQL - A query language to empower your API consumers (NDC Sydney 2017)
GraphQL - A query language to empower your API consumers (NDC Sydney 2017)
 
Grails
GrailsGrails
Grails
 
Grails
GrailsGrails
Grails
 
Groovy on Grails by Ziya Askerov
Groovy on Grails by Ziya AskerovGroovy on Grails by Ziya Askerov
Groovy on Grails by Ziya Askerov
 
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume LaforgeGroovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge
Groovy in the Enterprise - Case Studies - TSSJS Prague 2008 - Guillaume Laforge
 
Pragmatic Parallels: Java and JavaScript
Pragmatic Parallels: Java and JavaScriptPragmatic Parallels: Java and JavaScript
Pragmatic Parallels: Java and JavaScript
 
GraphConnect Europe 2016 - Building Spring Data Neo4j 4.1 Applications Like A...
GraphConnect Europe 2016 - Building Spring Data Neo4j 4.1 Applications Like A...GraphConnect Europe 2016 - Building Spring Data Neo4j 4.1 Applications Like A...
GraphConnect Europe 2016 - Building Spring Data Neo4j 4.1 Applications Like A...
 
"Full Stack frameworks or a story about how to reconcile Front (good) and Bac...
"Full Stack frameworks or a story about how to reconcile Front (good) and Bac..."Full Stack frameworks or a story about how to reconcile Front (good) and Bac...
"Full Stack frameworks or a story about how to reconcile Front (good) and Bac...
 
Polyglot Programming @ Jax.de 2010
Polyglot Programming @ Jax.de 2010Polyglot Programming @ Jax.de 2010
Polyglot Programming @ Jax.de 2010
 
MongoDB.local Berlin: Building a GraphQL API with MongoDB, Prisma and Typescript
MongoDB.local Berlin: Building a GraphQL API with MongoDB, Prisma and TypescriptMongoDB.local Berlin: Building a GraphQL API with MongoDB, Prisma and Typescript
MongoDB.local Berlin: Building a GraphQL API with MongoDB, Prisma and Typescript
 
JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4JavaScript 2.0 in Dreamweaver CS4
JavaScript 2.0 in Dreamweaver CS4
 
Developing Lightning Components for Communities.pptx
Developing Lightning Components for Communities.pptxDeveloping Lightning Components for Communities.pptx
Developing Lightning Components for Communities.pptx
 
Scripting Oracle Develop 2007
Scripting Oracle Develop 2007Scripting Oracle Develop 2007
Scripting Oracle Develop 2007
 

More from Michal Bachman

GraphAware Framework Intro
GraphAware Framework IntroGraphAware Framework Intro
GraphAware Framework IntroMichal Bachman
 
Neo4j Introduction at Imperial College London
Neo4j Introduction at Imperial College LondonNeo4j Introduction at Imperial College London
Neo4j Introduction at Imperial College LondonMichal Bachman
 
Neo4j - Tales from the Trenches
Neo4j - Tales from the TrenchesNeo4j - Tales from the Trenches
Neo4j - Tales from the TrenchesMichal Bachman
 
WebExpo Prague 2012 - Introduction to Neo4j (Czech)
WebExpo Prague 2012 - Introduction to Neo4j (Czech)WebExpo Prague 2012 - Introduction to Neo4j (Czech)
WebExpo Prague 2012 - Introduction to Neo4j (Czech)Michal Bachman
 

More from Michal Bachman (6)

GraphAware Framework Intro
GraphAware Framework IntroGraphAware Framework Intro
GraphAware Framework Intro
 
Intro to Neo4j (CZ)
Intro to Neo4j (CZ)Intro to Neo4j (CZ)
Intro to Neo4j (CZ)
 
(Big) Data Science
(Big) Data Science(Big) Data Science
(Big) Data Science
 
Neo4j Introduction at Imperial College London
Neo4j Introduction at Imperial College LondonNeo4j Introduction at Imperial College London
Neo4j Introduction at Imperial College London
 
Neo4j - Tales from the Trenches
Neo4j - Tales from the TrenchesNeo4j - Tales from the Trenches
Neo4j - Tales from the Trenches
 
WebExpo Prague 2012 - Introduction to Neo4j (Czech)
WebExpo Prague 2012 - Introduction to Neo4j (Czech)WebExpo Prague 2012 - Introduction to Neo4j (Czech)
WebExpo Prague 2012 - Introduction to Neo4j (Czech)
 

Recently uploaded

SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentationvaddepallysandeep122
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作qr0udbr0
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Developmentvyaparkranti
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Hr365.us smith
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfkalichargn70th171
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 

Recently uploaded (20)

SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
Odoo Development Company in India | Devintelle Consulting Service
Odoo Development Company in India | Devintelle Consulting ServiceOdoo Development Company in India | Devintelle Consulting Service
Odoo Development Company in India | Devintelle Consulting Service
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentation
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 

Recommendations with Neo4j (FOSDEM 2015)