例如,假设我的查询是:
匹配(你:用户)你在哪里:'洛杉矶'或者你。来自迈阿密'要么 u.Status:'单'或者你是:'艺术家'})回复你
如何更改查询,以便显示一个列,该列计算与查询匹配的属性数。
对于我上面的查询,假设我返回了以下用户:
> User1, Los Angeles, Miami, Single, Artist, (4 attributes matched query
> so show a 4 in column)
>
> User2, Los Angeles, Miami, Married, Artist, (3 attributes matched
> query so display 3 in column)
> User3, Los Angeles, New York, Married, Dancer, (1 attributes matched
> query so display 1 in column)
我用它来构建一种排名系统
我试图得到这个:
u.UserID u.MatchingAttributes User1 4 User2 3 User3 1
如果您可以请展示如何通过关系来表达这一点,也可以作为奖励。感谢。
答案 0 :(得分:2)
您可以使用一堆CASE
语句:
MATCH (u:User)
WITH u.UserID AS User, CASE WHEN u.LivesIn = 'Los Angeles' THEN 1 ELSE 0 END AS c1,
CASE WHEN u.From = 'Miami' THEN 1 ELSE 0 END AS c2,
CASE WHEN u.Status = 'Single' THEN 1 ELSE 0 END AS c3,
CASE WHEN u.Job = 'Artist' THEN 1 ELSE 0 END AS c4
RETURN User, c1 + c2 + c3 + c4 AS Matching
答案 1 :(得分:1)
假设您将图形建模为
现在,您可以将关系命名为合适的关系。我粘贴的图模型的唯一目的是说明匹配策略,这就是为什么我跳过了适当地命名关系并添加节点标签的原因。
现在你可以做的是
match (u:User)-[r]-(m) where m.name in ['LA','Miami','Single','Artist'] return u,count(m) as count
{假设m
个其他节点(用户标记的节点除外)上面有名称属性}