我目前正在开发一个社交应用,该应用需要按关键字过滤用户。我正在使用neo4j数据库。
我已经具备此功能,但是在按关系进行筛选时遇到了问题。
例如,用户A跟随用户F。搜索结果应首先显示F(如果存在),然后显示其他用户。
结果按用户名的字母顺序排序,但是现在我需要先按关系排序,然后再按用户名排序。
我当前的查询: 按用户名关键字获取所有用户,按用户名排序。
MATCH (u:User {userId:{userId}}), (su:User)
WHERE NOT (u)<-[:BLOCK]-(su)
AND su.username =~ {keyword}
RETURN SU
ORDER BY su.username
我的参考:https://neo4j.com/docs/developer-manual/current/cypher/clauses/order-by/
答案 0 :(得分:0)
已经找到解决方案:
MATCH (u:User {userName:{userId}}), (su:User {userStatus:1})
WHERE NOT (u)<-[:BLOCK]-(su)
AND su.userName =~ {keyword}
OR su.displayName =~ {keyword}
RETURN
CASE WHEN EXISTS((u)-[:FOLLOW]-(su)) THEN true
END AS isFollow, su
ORDER BY isFollow, LOWER(su.userName) ASC, LOWER(su.displayName) ASC
此查询将按关系,用户名和显示名称排序。如果有人有更好的答案和更好的性能,请告诉我。