【问题标题】:Can graph database query "nodes that a given node has no relationship with"?图数据库可以查询“给定节点与之没有关系的节点”吗?
【发布时间】:2019-11-27 13:32:25
【问题描述】:

我正在开发一个约会应用程序,用户可以在其中“喜欢”或“不喜欢”其他用户并进行匹配。 正如您可以想象的那样,该应用程序最重要的查询将是: Give me a stack of nearby user profiles that I have NOT liked/disliked before.

我尝试使用文档数据库 (Firestore) 来解决这个问题,并认为它根本不适合此类应用程序,因此进入了图形数据库世界,这对我来说是新的和令人着迷的。

我了解,从本质上讲,图形数据库通过跟踪关系来检索数据,并使关系成为一等公民。我现在的问题是,如果我要获取的节点是那些与给定节点没有关系的节点怎么办?查询会是什么样子?谁能提供一个示例查询?

编辑: - 在查询语句中添加nearby 条件

【问题讨论】:

  • 正如您在上一段中所说,您要解决的问题的本质并不是真正的“图表”。您似乎想通过获取数据库中的所有节点并从该列表中减去当前用户和当前链接到当前用户的所有节点来创建“可能”列表。如果没有其他一些分组或排序功能,例如“仅在过去 7 天内到达的节点”,这可能无法很好地扩展。
  • 嗨@djhallx,感谢您的回复。我不确定我是否理解正确,但在约会应用程序的场景中,我相信分组可能是按地理位置进行的,即用户只会对地理位置靠近他/她的那些“未链接”用户感兴趣。这是否使其更具可扩展性?
  • 考虑以下...当用户加入约会应用社区时,他们会陈述他们的兴趣。兴趣被实现为图中的节点,新用户将链接到这些兴趣节点。然后,当现有用户登录到他们的帐户并说“向我展示新的可能性”时,您执行一个图形查询,显示从他们自己通过所有兴趣节点到“加入日期”比“加入日期”更新的所有其他人员节点的所有路径上次运行查询的时间。这使它成为一个图形查询并且非常容易做到。

标签: neo4j graph-databases arangodb amazon-neptune


【解决方案1】:

这绝对是可能的,这是一个查询示例:

MATCH (me:Profile {name: "Chris"})
MATCH (other:Profile) WHERE NOT (other)-[:LIKES]->(me)

正如您在原始问题的 cmets 中所述,在大型数据集上可能无法很好地扩展,也就是说您很少使用一个标准进行匹配,例如,要匹配的可能配置文件列表可以按以下方式分组:

  • 地理位置
  • 个人资料深度2(谁喜欢我,然后找到他们喜欢的其他人,那些人喜欢我吗?)
  • 共同的兴趣
  • 年龄组
  • 肤色
  • ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多