Neo4j条件查询

pkln4tw6  于 2023-02-08  发布在  其他
关注(0)|答案(1)|浏览(208)

在Neo4j图中,我有2个节点具有相同的标签和4个属性,我希望条件检查这些属性的值是否相等,如果4个属性中的任何一个相等,我希望在这2个节点之间创建关系,如Similar_To,此关系还应包含属性(百分比),根据节点的4个属性中有多少属性匹配,我们计算百分比(如果1值为1属性匹配然后百分比是25,如果2然后百分比是50,如果3然后75,如果4然后100)想要查询这个,我可以有4如果条件在我的密码查询和我怎么写,请回复
我试过了

MATCH(n:Student),(m:Student)
WHERE id(n<>id(m) and (n.age=m.age OR n.marks=m.marks OR n.div=m.div OR n.weight=m.weight)
CREATE (n)-[:SIMILAR_TO{Percentage:25}]->(m) RETURN n,m

将创建关系,如果值为任何4属性相等,但百分比始终是25,我希望百分比值取决于属性匹配的数量
尝试着像这样

WITH 0 as x
MATCH(n:Student),(m:Student)
WHERE id(n)<>id(m)
//If n.age=m.age then x=x+25
//If n.marks=m.marks then x=x+25
//If n.div=m.div then x=x+25  
//If n.weight=m.weight then x=x+25
if x<>0  then CREATE (n)-[:SIMILAR_TO{Percentage:x}]->(m)
RETURN n,m

但我不知道如何写出这些条件

dluptydi

dluptydi1#

下面的查询是通用的,所以即使节点有〉4个属性,它仍然可以得到百分比而不改变代码。换句话说,当属性值相同时,不需要硬编码+25。
1.找出学生A(n)与学生B(m)不相同的学生。
1.假设节点n具有与m相同的属性,则在n和m的属性相等的情况下获得计数(使用reduce
1.将相似属性的计数除以n中属性的总数
1.根据属性使用n和m之间的相似性百分比创建(或合并)n和m之间的关系

MATCH (n:Student), (m:Student) WHERE n<m
WITH n, m, reduce(x=0, k in keys(n) | x + case when n[k]=m[k] then 1 else 0 end) as similarity
WITH n, m, 100*similarity/size(keys(n)) as percentage
MERGE (n)-[:SIMILAR_TO{Percentage:percentage}]->(m)

参考文献:
1.约简函数 https://neo4j.com/docs/cypher-manual/current/functions/list/#functions-reduce
1.按键功能www.example.com https://neo4j.com/docs/cypher-manual/current/functions/list/#functions-keys

相关问题