Neo4J Cypher:计算每个节点中有多少属性/属性与我的查询匹配
例如,假设我的查询是: 匹配(u:用户)您居住的地点在“洛杉矶”或来自“迈阿密”或 u、 状态:'Single'或u。作业:'Artister'})返回u 如何更改查询,以便显示一列,计算与查询匹配的属性数 对于上面的查询,假设我返回了以下用户:Neo4J Cypher:计算每个节点中有多少属性/属性与我的查询匹配,neo4j,cypher,Neo4j,Cypher,例如,假设我的查询是: 匹配(u:用户)您居住的地点在“洛杉矶”或来自“迈阿密”或 u、 状态:'Single'或u。作业:'Artister'})返回u 如何更改查询,以便显示一列,计算与查询匹配的属性数 对于上面的查询,假设我返回了以下用户: > User1, Los Angeles, Miami, Single, Artist, (4 attributes matched query > so show a 4 in column) > > User2, Los
> 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)
我用这个来建立一个排名系统
我正试图得到这个:
如果你能展示如何处理人际关系,也可以作为奖励。谢谢。假设您的图形建模为 现在,您可以将这些关系命名为合适的关系。我粘贴的图形模型的唯一目的是演示匹配策略,这就是为什么我没有适当地命名关系和添加节点标签 现在你能做的是
match (u:User)-[r]-(m) where m.name in ['LA','Miami','Single','Artist'] return u,count(m) as count
{假设上面的
m
其他节点(用户标记的节点除外)中有名称attrib}假设图形建模为
现在,您可以将这些关系命名为合适的关系。我粘贴的图形模型的唯一目的是演示匹配策略,这就是为什么我没有适当地命名关系和添加节点标签
现在你能做的是
match (u:User)-[r]-(m) where m.name in ['LA','Miami','Single','Artist'] return u,count(m) as count
{假设上面的
m
其他节点(用户标记的节点除外)中有名称attrib}假设图形建模为
现在,您可以将这些关系命名为合适的关系。我粘贴的图形模型的唯一目的是演示匹配策略,这就是为什么我没有适当地命名关系和添加节点标签
现在你能做的是
match (u:User)-[r]-(m) where m.name in ['LA','Miami','Single','Artist'] return u,count(m) as count
{假设上面的
m
其他节点(用户标记的节点除外)中有名称attrib}假设图形建模为
现在,您可以将这些关系命名为合适的关系。我粘贴的图形模型的唯一目的是演示匹配策略,这就是为什么我没有适当地命名关系和添加节点标签
现在你能做的是
match (u:User)-[r]-(m) where m.name in ['LA','Miami','Single','Artist'] return u,count(m) as count
{假设上面的
m
其他节点(用户标记的节点除外)中有名称attrib}您可以使用一组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
您可以使用一组
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
您可以使用一组
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
您可以使用一组
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
如果您将其建模为单独的节点而不是attribs\,则会更好。像单身/已婚可以是2个节点,纽约/洛杉矶可以是2个其他节点。所有这些都是通过关系联系起来的。然后你可以很容易地做你想做的事情。是的,听起来更好,但我不知道如何使用或使用你提到的关系编写相同的查询。但是如果我使用关系,我将如何计算匹配的属性?您可以创建用户节点喜欢的单独节点,而不是将其作为节点属性保存。查看我的解决方案以获得更清晰的理解。如果您将其建模为单独的节点而不是attribs\,则会更好。像单身/已婚可以是2个节点,纽约/洛杉矶可以是2个其他节点。所有这些都是通过关系联系起来的。然后你可以很容易地做你想做的事情。是的,听起来更好,但我不知道如何使用或使用你提到的关系编写相同的查询。但是如果我使用关系,我将如何计算匹配的属性?您可以创建用户节点喜欢的单独节点,而不是将其作为节点属性保存。查看我的解决方案以获得更清晰的理解。如果您将其建模为单独的节点而不是attribs\,则会更好。像单身/已婚可以是2个节点,纽约/洛杉矶可以是2个其他节点。所有这些都是通过关系联系起来的。然后你可以很容易地做你想做的事情。是的,听起来更好,但我不知道如何使用或使用你提到的关系编写相同的查询。但是如果我使用关系,我将如何计算匹配的属性?您可以创建用户节点喜欢的单独节点,而不是将其作为节点属性保存。查看我的解决方案以获得更清晰的理解。如果您将其建模为单独的节点而不是attribs\,则会更好。像单身/已婚可以是2个节点,纽约/洛杉矶可以是2个其他节点。所有这些都是通过关系联系起来的。然后你可以很容易地做你想做的事情。是的,听起来更好,但我不知道如何使用或使用你提到的关系编写相同的查询。但是如果我使用关系,我将如何计算匹配的属性?您可以创建用户节点喜欢的单独节点,而不是将其作为节点属性保存。查看我的解决方案以获得更清晰的理解。这是一个非常聪明的方法!!美好的这就是我最后使用的,并且将它与coalesce(对于true/false)和reduce结合起来,将总和相加。谢谢。这是一个非常聪明的方法!!美好的这就是我最后使用的,并且将它与coalesce(对于true/false)和reduce结合起来,将总和相加。谢谢。这是一个非常聪明的方法!!美好的这就是我最后使用的,并且将它与coalesce(对于true/false)和reduce结合起来,将总和相加。谢谢。这是一个非常聪明的方法!!美好的这就是我最后使用的,并且将它与coalesce(对于true/false)和reduce结合起来,将总和相加。谢谢。谢谢你的图表和回复。我最终使用了Nicole的解决方案,但正如您所提到的,我将更多地利用neo4j关系。此外,我建议您阅读neo4j用于存储属性的底层数据结构,以及如何优化数据检索。。因为这样你就会明白我为什么建议使用关系了。谢谢你的图表和回复。我最终使用了Nicole的解决方案,但正如您所提到的,我将更多地利用neo4j关系。此外,我建议您阅读基础数据