Hi, Mark. I would suggest three different "types" of relationships rather than just a single "Strength" relationship : SkillStrength (for person->skill) , SkillRelevance (for skill->job), and SkillAffinity (for skill->skill), with a numeric property on the relationship that gauges the "strength".
I would design it with three nodes off the root node, 'People', 'Skills', and 'Jobs', and then each person/skill/job would be a node linked to one of those three nodes using a relationship (e.g. "Person" relationship, "Skill" relationship, and "Job" relationship). The traversals look pretty simple, and you can define different algorithms for aggregating the results (and can probably build on some of the graph algos that are in the Neo4J optional packages). It will probably be easiest (and more performant) to sort the aggregated results "after the fact", though there's no technical reason you couldn't do it in-process during the traversal. Looks like a fun project and a good fit for Neo! -----Original Message----- From: user-boun...@lists.neo4j.org [mailto:user-boun...@lists.neo4j.org] On Behalf Of Mark Nijhof Sent: Friday, May 07, 2010 7:22 AM To: user@lists.neo4j.org Subject: [Neo] Usage questions Hi, I have a few questions with respect to using Neo4j, let me outline the details of what we want to accomplish first. We are building a job site for the Scandinavian IT market and for my question I would like to use the simplified model: - Persons - Skills - Jobs A Person will have certain Skills but the relation between the person and the skills depends on how well he possesses these skills. I like to call this relation Strength. The same applies to Jobs, a Job requires certain Skills but here as well some skills are more important then others. Then there are also relations between the different Skills them selves, some skills are very tight related together other are no, or have no relation at all. Which would end up like this: - Persons <-- Strength --> Skills - Skills <-- Strength --> Skills - Jobs <-- Strength --> Skills I see all relations bi-directional as I want to be able to from one end to the other. Now what I want to be able to do is: - Find a match between a Job and a Person depending on the relations between them (via Skills) and also try to calculate the overall Strength between these matches. This can go both ways. - Being able to use the relations between Skills to suggest other Jobs even if the skills are not found in the search query. A very simple example would be: Search for Ruby and JavaScript would also suggest Jobs that only have Rails specified. Since there is a strong relation between Ruby and Rails as well as between JavaScript and Rails. There are many more scenario's that we would want to query, but I think that this would be enough to describe the problem domain :-) else just ask. F.ex. later there will also be relations between Companies and Persons and Companies and Skills, and ... Questions: - Are my assumptions correct that Neo4j would be a good fit? - Besides the relations there is a _lot_ more content attached to Persons and Jobs should this data be stored in Neo4j as well, or should that go into a document db and that Neo4j only has a reference? - Given the previous question, if that content is in Neo4j how well is it searchable? I believe Lucene is supported as well, can this be used in the traversal searches? - We are using Heroku for our platform (at least in the start) and so we need a different server to host Neo4j, I am thinking that an Amazon instance would be great, then using JRuby in front of it to create a custom API for the Heroku app to use. Does that sound like a good fit? (our Java abilities are not great, and feel more comfortable with Ruby). I hope I have explained our situation well enough and am looking forward to see some discussion around it. Cheers, -Mark -- Mark Nijhof Cre8ive Thought m: 0047 95 00 99 37 e: mark.nij...@cre8ivethought.com w: www.cre8ivethought.com _______________________________________________ Neo mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user _______________________________________________ Neo mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user