我有一个成员图和他们看过的项目.
此数据将用于根据类似成员查看过的项目推荐项目.我想根据项目颜色的相似程度对项目进行排序.颜色以数组形式存储在项目中(["红色","蓝色","绿色"]).在cypher中有没有办法比较数组,看看它们共有多少个元素?
给定两个节点n和m,它们看起来像:
CREATE ({id: 1, color: ["red", "blue", "green", "yellow"]})
CREATE ({id: 2, color: ["red", "blue", "green", "white"]})
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
MATCH n, m
WHERE n.id = 1 AND m.id = 2
RETURN length(FILTER(x in n.color WHERE x in m.color))
Run Code Online (Sandbox Code Playgroud)
该FILTER函数遍历n.color数组,将当前值绑定到x(由我任意选择,可能不同).x in m.color对每个x值检查谓词(),如果它的计算结果为true,则将该元素推送到FILTER返回的新数组中.您可以将其保留在两个阵列的交叉点(在这种情况下为红色,蓝色和绿色),或将其包装在length函数中以查看两个节点之间共享的颜色数(在本例中为3).
查看完整的FILTER文档:http://docs.neo4j.org/chunked/milestone/query-functions-collection.html#functions-filter