密码查询通过关系揭示同一实体

问题描述 投票:0回答:1

我对图形数据库和 Neo4j 总体来说还很陌生,但尝试使用这种方法解决问题。

我有两个数据集,一个具有

addresses
DOC_ID
,其中许多地址通过
is_in
关系与文档相关。每个
DOC_ID
中可以有多个地址。

第二个数据集具有主页

owners
DOC_ID
,其中
owners
与每个文档 ID 具有
is_in
关系。

数据集 1 如下所示。

      address               DOC_ID        
1    123 Rock Rd            0134
2.   456 John Drive         2157
3.   789 York St.           9871
4.   927 Farm Ct.           9871
...

数据集 2 也类似:

      owner               DOC_ID        
1    John D.                0134
2.   Sarah Cote             2157
3.   Jack Ma                9871
...

我用来加载这些数据的查询:

# Dataset 1 with addresses
LOAD CSV WITH HEADERS FROM 'file:///addresses.csv' AS row
WITH row WHERE row.address IS NOT NULL
MERGE (l:location {address: row.address, doc_id:row.DOC_ID})
MERGE (d:doc {doc_id:row.DOC_ID})
MERGE (l)-[r:is_in]->(d)

# Dataset 2 with home owners
LOAD CSV WITH HEADERS FROM 'file:///owners.csv' AS row
WITH row WHERE row.owner IS NOT NULL
MERGE (n:home_owner {name: row.owner, doc_id:row.DOC_ID})
MERGE (d:doc {doc_id:row.DOC_ID})
MERGE (n)-[r:is_in]->(d)

地址数据集包含所有者的地址以及其他不相关的地址。此外,相同的所有者可能会出现在不同的名称下,但我知道他们应该具有相同的地址。我最终想做的是揭露

owner
以不同名称运营的实体。

我可以推理某些事情,例如与所有者的地址相比,地址在数据集中出现的次数相对较少,而所有者的地址应该出现在与该所有者相关的大多数文档中。所以我在下面写了这个查询,这将有助于整理一些所有者地址。但我从这个查询中得到 0 个结果。

MATCH(n:home_owner-[f:is_in]->(d:doc)<-[r:is_in]-(l:location)
WITH l, n, count(r) as rct
WHERE rct > 20
RETURN l, n

我想知道这是我的查询有问题,还是我的逻辑不正确。或者neo4j中有没有更好的方法来解决这个问题?任何帮助/见解将不胜感激。

neo4j graph-databases
1个回答
1
投票

第二行:WITH l, n, count(r) as rct 是问题所在。当您进行聚合时,它将在分组中包含 l 和 n(类似于 SQL group by)。因此,您没有获得正确的 rct 计数,因为每个位置和所有者在分组中都被计为 1。这是您问题的正确查询。

MATCH (n:home_owner)-[r:is_in]->(:doc)<-[:is_in]-(:location)
//find the homeowners with more than 20 address
WITH n, count(r) as rct WHERE rct > 20
//find the location of those homeowners
MATCH (n)-[:is_in]->(:doc)<-[:is_in]-(l:location)
RETURN n, l

其次,您的加载脚本存在拼写错误。我现在改正了。

带有地址的数据集 1
old: MERGE (d:doc {DOC_ID})
correct: MERGE (d:doc {doc_id:row.DOC_ID})
数据集 2 与房主
old: MERGE (n)-[r:is_in]->(b)
correct: MERGE (n)-[r:is_in]->(d)
© www.soinside.com 2019 - 2024. All rights reserved.