我有一个具有属性的电影节点,例如:类型、作者、语言(字符串数组)。
我想得到所有具有相似数组属性的节点,以及相似度百分比。
例如,对于类型属性:
电影1:犯罪,戏剧,神秘
电影2:戏剧
33%的相似性
此外
此外,我还需要一个查询,返回至少有一种常见类型作者(语言)的所有电影。
我知道我必须使用collect函数,但是我如何比较数组
例如:电影1:犯罪,戏剧,神秘
电影2:犯罪,密斯特
电影3:迷幻药,喜剧
电影4:喜剧
第一组:电影1,Movie2,Movie3
第2组:电影3,Movie4
发布于 2017-05-01 13:51:59
您可以使用REDUCE来计算交叉口:
WITH
['Drama','Crime','Mystery'] as genre1,
['Drama'] as genre2
WITH
genre1,
genre2,
CASE WHEN size(genre1)>size(genre2)
THEN size(genre1)
ELSE size(genre2)
END as maxSize,
REDUCE(acc=0,
genre in genre1
| acc + CASE WHEN genre in genre2 THEN 1 ELSE 0 END
) as similarity
RETURN genre1,
genre2,
100.0 * similarity / maxSize as similarity或者您可以从apoc.coll.intersection中使用APOC library函数
WITH
['Drama','Crime','Mystery'] as genre1,
['Drama'] as genre2
WITH
genre1,
genre2,
apoc.coll.max([size(genre1), size(genre2)]) as maxSize,
apoc.coll.intersection(genre1, genre2) as similarity
RETURN genre1,
genre2,
100.0 * size(similarity) / maxSize as similarity如果您只想找到至少有一种类型相交的节点:
MATCH (M:Movie)
UNWIND M.genres as genre
WITH genre,
M
ORDER BY id(M) ASC
WITH genre,
collect(M) as movies
RETURN distinct movies as movieshttps://stackoverflow.com/questions/43719610
复制相似问题