Thanks Lundin, but...... Wow, you see this part of your query: 

MATCH users-[:ASSOCIATED_TO]->(profile)

it would grab ALL paths  ;) ..let's say I have 2 millions of users, it 
would get the 2 millions of paths..  (Your query took 3900 ms to execute 
...)  Just too long and too heavy

I've just made this query: 

MATCH (u1:User {_id: "691dfb07-1ca3-44ba-9b2b-3807a0629156"}), (u2:User {_id
: "21149fc5-97ee-45f9-8250-558817c930af"}), knowledgePath = allShortestPaths
(u1-[r:KNOWS*..4]-(u2))
WITH nodes(knowledgePath) as knowledgeNodes, u1, u2
WITH filter(user in knowledgeNodes WHERE user._id <> u1._id AND  user._id <>u2
._id) as filteredUsers
RETURN extract(filteredUser in filteredUsers | extract( p in filteredUser-[:
ASSOCIATED_TO]->() | last(nodes(p)).firstName + ":" + last(nodes(p)).
lastName)) as knowledge

(excluding in this case the boundaries (extreme users)). 

It took me an average about 110ms of execution. 

I ended up with this results: 

Bob:SMITH, Alice:SCOTTBob:SMITH, Alexander:FISHER

I use the ":" separator in order to be able to parse them and map them to 
Java POJO for instance (by splitting the result on ":").

By the way, I said in my first part above:

>  Not returning a collection of knowledge (with good properties as 
> expected) at once in one record, but rather distinct records, each one 
> containing (firstName, LastName)


It was a nonsense to avoid a collection as a result of each record, since 
allShortestPaths returns multiple paths.

If someone has a better solution, with pleasure :)

Michael


On Monday, March 31, 2014 3:45:14 PM UTC+2, Lundin wrote:
>
> Hi,
>
> Mabey something more simple like this
>
> MATCH (u1:People { name: "MYname" }),(u2:People { name: "myfriend" }), 
> knowledgePath = allShortestPaths(u1-[:KNOWS*..4]-(u2)) WITH nodes(
> knowledgePath) AS knowledgeNodes,u1,u2 MATCH users-[:ASSOCIATED_TO]->(
> profile) WITH profile,knowledgeNodes,u1,u2 WITH extract(users IN 
> knowledgeNodes | profile.name) AS knowledge RETURN DISTINCT head(knowledge
> );
>
> Den måndagen den 31:e mars 2014 kl. 14:46:45 UTC+2 skrev Michael Azerhad:
>>
>> Hi,
>>
>> Let's assume this beginning of Cypher query, aiming to retrieve all 
>> shortest paths (regarding knowledge) between two users:
>>
>> MATCH (u1:User {id: "1"}), (u2:User {id: "2"}), knowledgePath 
>> =allShortestPaths
>> (u1-[:KNOWS*..4]-(u2))
>>
>> Besides, each User is linked to a UserProfile node in the graph through 
>> the relationship ASSOCIATED_TO.
>>
>> So, what I want is to end up retrieving the UserProfile's firstName 
>> property and  UserProfile's lastName property of each knowledge, including 
>> the boundaries (the 2 extreme users).
>>
>> I tried this:
>>
>> MATCH (u1:User {id: "1"}), (u2:User {id: "2"}), knowledgePath 
>> =allShortestPaths
>> (u1-[:KNOWS*..4]-(u2))
>> WITH nodes(knowledgePath) as knowledgeNodes
>> RETURN extract(users in knowledgeNodes | extract( p in users-[:
>> ASSOCIATED_TO]->() | last(nodes(p)))) as knowledge
>>
>>
>> This returns me a collection of each UserProfile Node (each whole node) 
>> .....
>>
>> My preference would be:
>> As my specification evoked above, returning collection of only some 
>> UserProfile's properties for each knowledge. (firstName AND lastName)
>>
>> A better preference would be:
>> Not returning a collection of knowledge (with good properties as 
>> expected) at once in one record, but rather distinct records, each one 
>> containing (firstName, LastName)
>>
>> What could I do to do the trick?
>>
>> Thanks a lot,
>>
>> 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.

Reply via email to