Yes, but it would never be counted as a friend of friend. On Wednesday, March 16, 2016 at 12:28:44 AM UTC+1, Michael Hunger wrote: > > your shortest-path doesn't imply that it's not the same person. > > Robert would also be counted as direct friend. > > On Wed, Mar 16, 2016 at 12:25 AM, Michael Azerhad <[email protected] > <javascript:>> wrote: > >> Hi Michael, >> >> I think your query would result wrong results. >> >> Michael - *KNOWS* - Julia - *KNOWS* - Robert - *KNOWS* - Michael (same >> Michael as previous one) >> >> It would consider Robert as a friend's friend for Michael (Michael - >> Julia - Robert). >> However, it is his direct friend ... (Robert - Michael) >> I think your solution can't work with cyclic graph ;) >> >> That's why I used shortestPath function, that clearly avoids that. >> >> What do you think? >> >> >> On Wednesday, March 16, 2016 at 12:03:52 AM UTC+1, Michael Hunger wrote: >>> >>> try this: >>> >>> MATCH (person:Person) >>> OPTIONAL MATCH (person)-[:KNOWS]-(f1:Person)-[:KNOWS]-(f2:Person)-[: >>> KNOWS]-(f3:Person) >>> WITH person, count(distinct f1) as f1, count(distinct f2) as >>> f2,count(distinct >>> f3) as f3 >>> RETURN person._firstName + " " + person._lastName, f1, f2, f3 >>> >>> alternatively >>> >>> MATCH (person:Person) >>> OPTIONAL MATCH (person)-[:KNOWS]-(f1:Person)-[:KNOWS]-(f2:Person) >>> WITH person, count(distinct f1) as f1, count(distinct f2) as >>> f2,collect(distinct f2) as p2 >>> WITH person, f1,f2, reduce(x=0, p in p2 | x + size((p2)-[:KNOWS]-()) ) >>> as f3 >>> RETURN person._firstName + " " + person._lastName, f1, f2, f3 >>> >>> >>> >>> On Tue, Mar 15, 2016 at 10:30 PM, Michael Azerhad <[email protected]> >>> wrote: >>> >>>> Using Neo4J 2.1.5. >>>> >>>> Data: >>>> >>>> - 2000 Persons >>>> - KNOWS relationships between some of them >>>> >>>> >>>> Goal of the query: >>>> >>>> For each person, display her fullname + amount of friends + amount of >>>> friends' friends + amount of friends' friends' friends. >>>> >>>> >>>> MATCH (person:Person) >>>> WITH person >>>> OPTIONAL MATCH person-[:KNOWS]-(p:Person) >>>> WITH person, count(p) as f1 >>>> OPTIONAL MATCH path = shortestPath(person-[:KNOWS*..2]-(f2:Person)) >>>> WHERE length(path) = 2 >>>> WITH count(nodes(path)[-1]) AS f2, person, f1 >>>> OPTIONAL MATCH path = shortestPath(person-[:KNOWS*..3]-(f3:Person)) >>>> WHERE length(path) = 3 >>>> WITH count(nodes(path)[-1]) AS f3, person, f2, f1 >>>> RETURN person._firstName + " " + person._lastName, f1, f2, f3 >>>> >>>> >>>> This query lasts long ! : 60 seconds ! >>>> >>>> Is there a tips to optimize it? >>>> >>>> Thanks, >>>> >>>> Michael >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Neo4j" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected]. >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> >>> -- >> You received this message because you are subscribed to the Google Groups >> "Neo4j" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> For more options, visit https://groups.google.com/d/optout. >> > >
-- You received this message because you are subscribed to the Google Groups "Neo4j" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
