Hi Jacob, thanks for answer. )

Followed your idea, found plenty of BranchSelector examples at
https://github.com/neo4j/graphdb/tree/master/kernel/src/main/java/org/neo4j/kernel
(link
you've quoted somehow didn't work). I guess modified
PostorderBreadthFirstSelector method, with gatherSourceIterator() sorting
its queue by node weight, will fit in my model just right. )

By the way, I'm a bit confused about how to design this. I suppose the queue
sorting algorithm should be based on properties of wrapper objects, not the
ones of nodes. Does it mean it's better to apply something like...

ArrayList<InterestNode> Interest.sort(ArrayList<InterestNode>),

... wrapping all the nodes into objects? Or will it suffice to design some
helper method in Domain class, working directly with Nodes?
(sorry if it looks a bit complicated: it has to be, I've just started to use
Java :) )

About processing the weights outside of traversal: yes, that's definitely a
sensible option, and may be we'll just go that way after all... But what I'm
trying to do is to use the laziness of Traverser: fetch only the required
quantity of matching nodes (best first), not all of them, and then opt out
of its cycle.

Again, thank you for your suggestions!

-- iD

On 23 June 2011 19:38, Jacob Hansson <[email protected]> wrote:

> The order method indeed does decide what order the graph is traversed, you
> can either use it with the predefined traversal orders like so:
>
> td.order(CommonBranchOrdering.PREORDER_DEPTH_FIRST)
>
> or you can pass it your own branch selector implementation, see
>
> https://github.com/neo4j/community/blob/master/kernel/src/main/java/org/neo4j/kernel/PreorderDepthFirstSelector.javafor
> an example.
>
> An easier way to include weights would be to make the traversal only follow
> LIKES relationships that are over a certain weight threshold.

You can also process the weights outside of the traversal entirely. For
> instance, you can calculate the average weight for each path returned by
> the
> traversal, sort the result by that, and only return the top results.


> /jake
>
> On Thu, Jun 23, 2011 at 8:30 AM, Igor Dovgiy <[email protected]> wrote:
>
> > Hi all,
> >
> > I'm trying to implement a recommendations system app with Neo4j (1.4).
> > Basically, I intend to have some 'User' nodes and some 'Interest' nodes
> in
> > my graph. Then, to find users with similar interests, traverse it by
> > something like...
> >
> > TraversalDescription td = new Traversal.description()
> >   .relationships(RelTypes.LIKES)
> >   .evaluator(Evaluators.atDepth(2));
> >
> > The real question is, though, whether I'll be able to choose what
> Interest
> > nodes to walk through first, depending on their weights (i.e., number of
> > users linked to them)? As I understand, the order() method is designed
> > right
> > for this case, but sadly I was unable to find examples of its usage...
> >
> > Any help will be greatly appreciated!
> >
> > -- iD
> > _______________________________________________
> > Neo4j mailing list
> > [email protected]
> > https://lists.neo4j.org/mailman/listinfo/user
> >
>
>
>
> --
> Jacob Hansson
> Phone: +46 (0) 763503395
> Twitter: @jakewins
> _______________________________________________
> Neo4j mailing list
> [email protected]
> https://lists.neo4j.org/mailman/listinfo/user
>



-- 
-- iD
_______________________________________________
Neo4j mailing list
[email protected]
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to