Head's Up! These forums are read-only. All users and content have migrated. Please join us at community.neo4j.com.
10-16-2022 12:16 AM - edited 10-16-2022 12:21 AM
I have a node that is Person, which has properties like: (age, address, school, pet's name). The node has a relationship with another node Vacation. I want to find similar nodes to a Person based on only 3 properties: person's age, address and count(Vacation). For example if I select Person A, based on his/her age, address and count(Vacation), 3 other (similar) person will return on screen.
I'm looking for a cypher query thst will help me. I have searched for the documentations and multiple examples but don't really know how to achieve that. Any recommendation will ve very helpful. Thank you.
10-16-2022 03:23 AM
Do you have a definition of what you consider similar? If so, we can try to write a query to find nodes that meet your similarity criteria.
man alernative is the neo4j graph data science library. It has node similarity algorithms. One is K nearest neighbor. It only supports numeric properties. Also, it is not a real time analysis. You project your graph and run the algorithm on the projected graph to find the results.
https://neo4j.com/docs/graph-data-science/current/algorithms/knn/
10-16-2022 03:31 AM
Hi, thank you for your answer. Yes, the nodes are similar as compared to age, address and count(Vacation). I have come up with a solution which does not return the result but yet I'll share:
MATCH (p:Person {PersonName: 'Vulsini'})-[:VAC_DETAILS]->(vacation)
WITH p, collect(id(vacation)) AS p1v1
MATCH (v2:vacation)-[:VAC_DETAILS]->(vacation2) WHERE v <> v2
WITH v, p1v1, v2, collect(id(vacation2)) AS p2v2
RETURN v.vacationPlace AS from, v2.vacationPlace AS to,
gds.similarity.jaccard(p1v1, p2v2) AS jaccard;
10-16-2022 04:12 AM
Thank you for sharing. A couple comments:
1) where is variable ‘v’ defined used in your ‘where’ clause?
2) aren’t people related to vacation via the VAC_DETAIL relationship? Your second match is relating two vacation nodes via that relationship? Is that valise?
3) you have converted the list of vacations to a list of integers so you can compare nodes via the Jaccard measure, but that can’t give you a useful metric, as the id’s are assigned and don’t convey any information about the vacation.
All the sessions of the conference are now available online