neo4j 在多个实体之间通过属性相等进行匹配的正确方法是什么?

ttp71kqs  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(175)

我有以下类型的多个实体和属性:

  • LinkedIn公司
  • 姓名
  • 电话机
  • 脸书
  • Facebook网址
  • 姓名
  • 网站URL
  • 电话机
  • 网址
  • 链接网址
  • Facebook网址
  • 电话机

并非所有图元的所有属性都已填充。
我想创建一个统一的数据集,该数据集将基于所有实体之间匹配的对应值
我正在考虑使用graphdb,特别是neo4j
但是如果每个实体都是一个节点,那么我将不得不通过编程检查每个属性与所有其他实体中相应属性的相等性来创建每个关系。
我也考虑使用某种sql连接,但是当数据模型扩展时,维护它似乎很困难。
解决此问题的写入方法是什么?
哪种技术最适合?

zdwk9cvp

zdwk9cvp1#

这里有一种在neo4j中实现这一点的方法。(Stackoverflow不是询问“最佳”技术的合适位置,因为这往往是非常主观的。)
您可以建立唯一的URLPhonePersonAccount节点,并将每个Account连接至适当的URLPhonePerson节点。
例如,假设您的3个示例帐户与同一个人相关,下面是您在数据库中表示该帐户的方法:

MERGE (pe:Person {name: 'Jane Doe'})
MERGE (ac_li:Account {type: 'li', id: 'xyz'})
MERGE (ac_fb:Account {type: 'fb', id: 'abc'})
MERGE (ac_si:Account {type: 'site', id: 'foo'})
MERGE (url_li:URL {type: 'li', url: 'http://example.net/xyz'})
MERGE (url_fb:URL {type: 'fb', url: 'http://example.com/abc'})
MERGE (url_si:URL {type: 'site', url: 'http://example.org/foo'})
MERGE (ph:Phone {number: '1234567890'})

MERGE (pe)-[:ACCOUNT]->(ac_li)
MERGE (pe)-[:ACCOUNT]->(ac_fb)
MERGE (pe)-[:ACCOUNT]->(ac_si)
MERGE (ac_li)-[:PHONE]->(ph)
MERGE (ac_fb)-[:URL]->(url_fb)
MERGE (ac_fb)-[:URL]->(url_si)
MERGE (ac_fb)-[:PHONE]->(ph)
MERGE (ac_si)-[:URL]->(url_li)
MERGE (ac_si)-[:URL]->(url_fb)

然后,如果要查找与特定URL相关的所有AccountPerson组合,可以执行以下操作:

MATCH (url:URL)<-[:URL]-(account)<-[:ACCOUNT]-(person)
WHERE url.url = 'http://example.com/abc'
RETURN account, person

相关问题