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.