4
$\begingroup$

I want to build a Recommendation System to recommend products to users. This is for research purposes. The context-system the engine will be integrated in is also not build yet.

So right now I am starting the project, building kind of a E-Commerce & Social-Network-Platform for research purposes.

To realize the recommendation system, I want to integrate Neo4j and Elasticsearch with each other. For the content based filtering part Elasticsearch should do its job nicely. For the collaborative filtering part I want to use the Graph in Neo4j.

I would like to ask you for some experience or suggestions about the following questions regarding this topic:

  1. Should I use another database as the main system storage and just use Neo4j to store recommendation data? Or is it a suggestive way to just store everything in the same graph?
  2. How would you determine which part of the recommendation computation should happen online in Realtime and which offline as a precomputation?
  3. Does anyone here have some experience with this kind of realization? What did your architecture look like?

Sorry, if this is a little vague described here and there. I am also new to this and want to expand my horizon.

Thanks alot for your help. I would be really happy to get some input here?

Cheers TJ

$\endgroup$
1
$\begingroup$

Why not using a Multi-Model DBMS like OrientDB (I'm the author) or any others? In this way, with just one system you can store documents and graphs together.

It would be: - much faster (because you avoid the double call to 2 systems where most of the times the 2nd call needs the output of the 1st call, so you pay a lot of latency) - easier to manage: one DBMS, one set of skills, in the case of commercial support, only one vendor

Following your use case, with a Multi-Model DBMS like OrientDB, you could start with a FULL-TEXT query (the underlying technology is Lucene, the same of Elastic Search) and then navigate the resulting graph.

Look at the Social Travel Agency example about how you can mix multiple models at the same time: https://orientdb.com/docs/3.0.x/gettingstarted/demodb/DemoDB-DataModel.html.

|improve this answer|||||
$\endgroup$
  • $\begingroup$ @user35910 I agree with Lvca using a multi-model approach. Check out ArangoDB as well. It has good documentation and excellent issue tracking and bug fixing practices. $\endgroup$ – Black Milk Jul 21 '17 at 19:31
  • $\begingroup$ Cool. I did not know multi-model dbs before. This really sounds like it is what I am looking for. @Lvca do you have something like a video tutorial or series, where I can get started with orientdb? I am exspecially interested in the batched querying like doing a full text query first and using the result for collaborative graph querying. $\endgroup$ – TobiasJakob Jul 22 '17 at 10:45
  • $\begingroup$ @BlackMilk Would you prefer ArangoDB or OrientDB. I do not quiet understand the concrete differences. $\endgroup$ – TobiasJakob Jul 22 '17 at 10:58
  • $\begingroup$ Sure, get this free video course about OrientDB: orientdb.com/getting-started $\endgroup$ – Lvca Jul 22 '17 at 14:44
  • $\begingroup$ @TobiasJakob I've worked with both. If you want to scale something that will ultimately go into production, go with ArangoDB as it will be the most reliable platform to go with, especially if you need consistently good documentations and bugs ever arise. Otherwise, for pure research purposes and small non-production purposes do OrientDB. $\endgroup$ – Black Milk Jul 24 '17 at 15:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.