【问题标题】:Neo4J query to find same data link to different nodesNeo4J 查询以查找到不同节点的相同数据链接
【发布时间】:2016-09-04 18:48:38
【问题描述】:

以下是我在 Neo4j 中创建的:

节点:客户姓名、客户地址和客户联系方式

根据所有三个节点之间的共同关系链接这些节点。

我可以看到 Neo4j 中链接的所有三个节点。联系人包含电子邮件和电话号码,因此在某些情况下客户名称节点连接到电子邮件地址、电话号码和地址。

在我的学习曲线中,我被要求展示不同客户名称使用了多少相同的联系人以及不同客户名称使用了多少相同的地址。根据我的小经验,我尝试了一些查询,但无法获得结果。

尝试了以下查询 -

start n=node(*)
match n-[:CONTACT_AT]-()
return distinct n

CONTACT_AT是客户名称与Contact(email、phone)节点的关系。

【问题讨论】:

  • 您尝试过使用哪些查询?
  • 可能是一个错误的查询 - 请原谅我缺乏知识 start n=node(*) match n where has(n.contact) return n 虽然在运行此查询后它崩溃并且我到达崩溃屏幕在铬上。

标签: neo4j cypher


【解决方案1】:

您的问题没有提供有关您的数据模型的足够信息。为了节省时间,我假设它看起来像这样(不显示所有属性):

(a:Address)<-[:ADDRESS_AT]-(p:Person {name: '...'})-[:CONTACT_AT]->(c:Contact)

使用此模型,您可以通过以下方式获取具有相同联系人的所有人员的姓名:

MATCH (person:Person)-[:CONTACT_AT]->(contact:Contact)
RETURN contact, COLLECT(person.name) AS names;

这就是你如何获得所有具有相同地址的人的名字:

MATCH (person:Person)-[:ADDRESS_AT]->(address:Address)
RETURN address, COLLECT(person.name) AS names;

【讨论】:

  • 谢谢。数据模型正确。我正在努力在 Chrome 网络客户端上运行密码查询。几秒钟后它崩溃(Aw snaps)。我检查了它在 Chrome RAM 使用达到 1.2GB 后崩溃。我当前的系统有 72GB 的 RAM、Windows7、Xeon 2.4(2 个处理器)。
  • 我在某处读到增加配置中的内存可能会有所帮助,因此我尝试使用以下内容更改 neo4j.properties:neostore.nodestore.db.mapped_memory=500M neostore.relationshipstore.db.mapped_memory=1000M neostore.propertystore。 db.mapped_memory=1000M neostore.propertystore.db.strings.mapped_memory=1300M neostore.propertystore.db.arrays.mapped_memory=1300M 但没有任何变化,Chrome 使用 1.2GB 内存后一直崩溃
  • 如果要返回的数据量很大,请尝试减少数量。一种方法是附加 LIMIT 100 以仅查看 100 个结果行。
  • 非常感谢您的帮助。我尝试使用 LIMIT 100 和 1000,但所有地址都只显示一个节点。是否可以仅显示链接到多个客户名称的地址?与联系人相同,它只显示一对一的关系。
猜你喜欢
  • 2018-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-20
  • 1970-01-01
  • 2018-06-19
  • 1970-01-01
  • 2018-08-13
相关资源
最近更新 更多