如果存在关系,则按关系对neo4j进行排序

时间:2018-08-11 08:56:16

标签: neo4j spring-data-neo4j neo4jclient spring-data-neo4j-4 neo4j-ogm

我目前正在开发一个社交应用,该应用需要按关键字过滤用户。我正在使用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/

1 个答案:

答案 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

此查询将按关系,用户名和显示名称排序。如果有人有更好的答案和更好的性能,请告诉我。