Hi guys,
For what its worth----
I have yet to use the Neo4j traversal framework because it is simply is not
expressive enough. The traverser framework is like a single-relational
traverser on a multi-relational graph. You only allow or disallow certain edge
labels--not the ordered concatenation of labels. Moreover, even with ordered
labels defined, the choices that a traverser make at every element (edge and
vertex) should be predicated on general purpose computing---predicated on the
state/history of the walker, the properties of the elements, ... anything.
>
> "relationships": [
> { "direction": "outgoing",
> "type": "KNOWS" },
> { "type": "LOVES" }
> ],
> "max depth": 4 }
What if I want to find all the people that love my post popular (by eigenvector
centrality) friends who also know me? Thus, simply taking "knows" and "loves"
relationships arbitrarily doesn't tell me that. What comes into play in such
situations are edge weights, ordered paths, loops, sampling, etc.
A general purpose traverser framework requires that you be able to define
adjacency arbitrarily. The traverser must be able to ask the engineer, at every
step (edge and vertex [1]), what do you mean by "adjacent" ---- where do I go
next?
[1] edges should be treated just as vertices---they have properties that can be
reasoned on. many times you want edges returned, not just vertices.
Take care,
Marko.
http://markorodriguez.com
_______________________________________________
Neo mailing list
[email protected]
https://lists.neo4j.org/mailman/listinfo/user