使用 MERGE 在 Neo4j 中插入通用实体:将问题与相似节点匹配

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

我正在使用 Neo4j 关联从官方政府文件中提取的数据,并且我正在开发一个 Python 程序来自动化此过程。但是,在某些情况下会提取更通用的实体,例如

(:Position {symbol: "xxx", name: "yyy", effective: false})
。当我尝试使用如下查询将其插入数据库时:

MERGE (c:Position {symbol: "xxx", name: "yyy", effective: false})
RETURN ID(c)

MERGE
子句最终匹配类型为
(:Position {symbol: "xxx", name: "yyy", location:"zzz", effective: false})
的节点。

如何修改我的 Cypher 查询以确保节点

(c:Position {symbol: "xxx", name: "yyy", effective: false})
插入到数据库中?在这种情况下,单独使用
CREATE
是不够的,因为可能会再次提取相似的节点。

我在这篇文章中遇到了类似的问题。但是,提供的解决方案在我的情况下不起作用,因为

WHERE
子句不返回任何内容。

neo4j cypher
1个回答
0
投票

MERGE
不适合您的用例。这是确保存在具有您想要的属性集的
Position
节点的一种方法。该查询假设所需的属性以
props
参数 的形式传递给查询(例如,
{symbol: "xxx", name: "yyy", location:"zzz", effective: false}

OPTIONAL MATCH (p:Position)
WHERE PROPERTIES(p) = $props
CALL {
  WITH p
  WITH p WHERE p IS NULL
  CREATE (q:Position)
  SET q = $props
  RETURN q AS result
  UNION
  WITH p
  WITH p WHERE p IS NOT NULL
  RETURN p AS result
}
RETURN ID(result)
© www.soinside.com 2019 - 2024. All rights reserved.